Hi Hi

'sl4a 모달 대화상자'에 해당되는 글 1건

  1. Python sl4a - 다양한 대화 상자 GUI 2

Python sl4a - 다양한 대화 상자 GUI 2

 

dialogCreateInput 함수를 이용해서 사용자에게 검색어를 입력 받고, 그것으로 구글 도서 검색 (http://books.google.com/) 을 검색한 결과를 이전 예제처럼 목록 대화 상자로 제시한다. 검색어를 입력받은 후에는 구글 검색 API를 이용해서 검색을 수행하고, 그결과로 얻은 책 제목들의 목록을 대화 상자로 제시한다.

service = gdata.books.service.BookService()
service.ClientLogin(email, pw)

titles = []
for bookname in service.get_library():
    titles.append(bookname.dc_title[0].text)

droid.dialogCreateAlert()
droid.dialogSetItems(list)
droid.dialogShow()

 

편의성의 대화 상자들

SL4A의 대화 상자 퍼사드에는 날짜 선택 상자(date picker) 등 편의성 UI 요소들을 위한 함수들이 여러개 있다.

droid.dialogCreateDatePicker(2012)

droid.dialogShow()

dialogCreatDatePicker 의 첫 인수는 연도이다. 생략 가능한 둘째, 셋째 인수를 지정해서 월과 일도 지정할 수 있다.

사용자가 선택한 날짜는 dialogGetResponse로 알수 있다.

시간 선택 대화 상자(time picker)를 띄우는 createTimePicker 함수 이다.

 

다음에는 패스워드 입력에 특화된 함수인 dialogGetPassword를 보자. 이 함수를 호출하면 패스워드 입력 대화 상자가 바로 나타난다.

사용자가 입력한 패스워드 dialogGetPassword의 반환값에서 알 수 있다.

 

 

진행 표시 대화 상자

응용 프로그램이 현재 무엇을 하고 있는지를 사용자가 알게 하는 것은 항상 좋은 일이다. 응요프로그램이 몇 초 이상 걸릴 작업을 수행한다면 진행 표시 대화 상자(progress dialogbox)를 사용하는 것이 바람직하다. SL4A의 UI 퍼사드는 수평 진행 표시줄 대화 상자를 위한 함수들과 화전식 진행 표시 대화 상자를 위한 함수들을 제공한다. 이들을 사용할 때 가장 어려운 부분은 작업의 진척 정도를 계산해서 진행 표시 대화 상자를 갱신하는 것이다.

이 대화 상자를 위한 함수는 dialogCreateHorizontalProgress 이다. 이 함수를 아무 인수 없이 호출하면 진행 정도가 0에서 100까지인 수평 진행 표시 대화상자가 준비 된다.

droid.dialogCreateHorizontalProgress()

droid.dialogShow() 

일단 대화 상자를 띄운 다음 , dialogSetMaxProgress 함수로 진행 정도의 최댓값을 설정한다.

현재 진행 정도를 설정하는 함수는 dialogSetCurrentProgress이다.

 

모달 대화 상자 대 비 모달 대화 상자

사용자 인터페이스에 쓰이는 대화 상자들은 그 행동 방식에 따라 크게 모달(modal, 모드가 있는) 대화 상자비 모달(non-modal, 또는 modeless) 대화 상자로 나뉜다. 모달 대화 상자는 일반적으로 다른 어떤 프로세스나 창의 자식으로 생성된다. 즉, 돌아갈 부모 프로세스 또는 고수준 창이 존재한다. 모달 대화 상자의 가장 큰 특징은, 모달 대화 상자가 자신의 부모 요소에 대한 접근을 '차단' 한다는 것이다. 다른 말로 하면, 사용자가 부모 요소와 상호작용하려면 먼저 모달 대화 상자를 닫아야 한다. 경고 대화 상자들도 본직적으로 모달 대화 상자이다.

# -*- coding: UTF-8 -*-
import android

droid = android.Android()

droid.dialogCreateAlert("나는 게임을 좋아합니다.","당신도 게임을 좋아하세요 ?")
droid.dialogSetPositiveButtonText("예")
droid.dialogNegativeButtonText("아니오")
droid.dialogShow()
droid.startLocating()

while True:
     # 사건이 일어나길 최대 10초 까지 기다린다.
    response=droid.eventWait(10000).result
    if response==None:
        #처리할 사건이 없음. 루프를 버ㅅ어난다.
        break
    if response["name"]=="dialog":
        #대화 상자 사건의 경우에도 루프를 벗어난다.
        break
    print response # 위치 사건일 가능성이 있음.
   
#루프를 벗어난다. 이제 대화 상자를 닫느다.
droid.dialogDismiss()
if response==None:
    print" 시간초과."
   
else:
    rdialog=response["data"] # 사용자 응답은 data 요소에 들어 있다.
    if rdialog.has_key("which"):
        result=rdialog["which"]
        if result=="positive":
            print "예! 나도 좋아해요!"
        else result=="negative":
            print "아, 그러시구나"
        else rdialog.has_key("canceled"): # yes, I know it's mispelled.
            print "결정하지 못하셨군요?"
        else:
            print "Unknow response=", response
    print droid.stopLocating()
    print "마침"