Button
- 프로젝트 창에서 버튼을 추가하고자 하는 액티비티의 UI을 더블 클릭합니다.
- 우측의 컨트롤 박스에서
Button컨트롤을 선택합니다. Button컨트롤을 왼쪽 클릭 후 원하는 위치에 클릭하거나 드래그 앤 드롭하면 컨트롤이 만들어집니다.만들어진 버튼을 왼쪽 클릭하면 속성 창에서 해당 버튼과 관련된 속성들을 확인하고, 변경할 수 있습니다.

버튼 색 변경
"텍스트 및 색상 변경"을 참고하십시오.
"버튼 상태에 따른 이미지 추가"를 참고하십시오.
기본 버튼 컨트롤의 색은 단색이지만, 사용자가 원하는 이미지 등을 추가할 수 있으며, 아래는 그 방법입니다.
- 먼저 UI파일에 버튼을 추가합니다.
- 추가된 버튼을 왼쪽 클릭하여 속성 창을 불러옵니다. 속성에서 이미지와 관련한 속성은 아래와 같습니다.
- Picture settings
- 버튼의 각 상태에 따른 이미지를 설정할 수 있고, 버튼의 상태가 바뀌면 자동으로 해당 이미지로 변경됩니다.
- Picture location
- 기본적으로 버튼에 설정된 이미지는 버튼의 중앙을 기준으로 확대/축소되어 버튼과 같은 크기로 변경되는데, 이 속성은 이미지를 버튼의 특정 위치에 특정 크기로 위치시킬 수 있습니다.
- Background picture
- 버튼의 배경 이미지를 설정합니다. 이미지는 자동으로 버튼의 크기만큼 확대/축소되어 표시됩니다.
- Picture settings
예제:
결과 이미지 :
위의 스크린샷은 속성 창의 파라미터 값을 보여주며, 그것의 의미는 다음과 같습니다.
버튼은 기본적으로 "off_normal.png"를 표시하고, 선택되었을 때 "on_normal.png"로 변경됩니다.
left, top, width, height는 이미지의 표시 위치(픽셀 단위)를 결정합니다. 사각형의 왼쪽 위 모서리가 시작 점(0, 0)이고, 오른쪽/아래쪽 방향으로 값이 증가하고, (131, 63)이 종료 점입니다. 만약 이미지의 실제 width와 height가 속성 창의 파라미터 값과 다르다면 이미지는 해당 속성 값에 따라 확대/축소됩니다.

버튼 컨트롤 간의 계층 관계
일반적으로 버튼 컨트롤은 4단계의 과정을 거쳐 디스플레이 됩니다.
- 버튼의 텍스트
- 버튼의 이미지
- 버튼의 배경 이미지
- 버튼의 배경 색
버튼에 이미지 추가
"버튼 상태에 따른 이미지 추가"를 참고하십시오.
버튼이 눌렸을 때, 어디에, 어떻게 코드를 추가하나요?
실제 개발에서 버튼은 매우 자주 사용되는 컨트롤 중 하나입니다. 보통 버튼 클릭 이벤트 발생 후 UI 화면의 내용이 갱신되는 등의 과정이 수행됩니다. 이를 위해 버튼이 클릭되었을 때 응답을 처리하는 과정이 필요하며, 아래는 그 과정입니다.
먼저 ID가
Button1인 버튼을 만듭니다.
프로젝트 탐색기에서 현재 프로젝트를 선택하고 마우스 오른쪽을 클릭하여 보여지는 팝업 메뉴 중
Compile FlyThings를 선택합니다. 이 기능은 UI파일을 기반하여 자동으로 템플릿코드를 생성합니다.(코드 생성에 대한 자세한 이해)UI 파일
main.ftu을 예로 들면, 이전 과정이 끝난 후jni/logic/mainLogic.cc파일이 현재 프로젝트 폴더에 아래와 같이 생성됩니다.
Note :main.ftu로 자동 생성된mainLogic.cc, 두 파일의 prefixes는 동일합니다.(코드 생성에 대한 자세한 이해)mainLogic.cc을 더블 클릭하여 열면, 파일에 아래의 코드가 있는 것을 확인할 수 있습니다.static bool onButtonClick_Button1(ZKButton *pButton) { //LOGD(" ButtonClick Button1 !!!\n"); return false; }스크린에서 생성된 버튼을 클릭하면 자동으로 위 함수가 호출됩니다. 그러므로 이 함수에 코드를 추가하는 것으로 사용자는 자신만의 프로세스를 추가할 수 있습니다.
함수의 이름은 특정한 규칙에 의거하여 생성되는 것을 확인할 수 있고, 위의 예제에서처럼 생성된 함수의 이름은
onButtonClick_XXXX(ZKButton *pButton)로 여기서 XXXX는 해당 컨트롤의 ID로 대체됩니다. (컨트롤과 함수의 관계에 대한 이해)
시스템 버튼
사용자가 정한 ID이외에 버튼 컨트롤은 2개의 시스템 버튼 ID를 가지고 있는데, sys_back과 sys_home이 바로 그것입니다. 이름으로부터 대략적으로 그 기능을 알 수 있듯이 뒤로 와 홈 기능을 위한 ID입니다. sys_back버튼을 클릭하면 직전 액티비티로 돌아가고, sys_home을 클릭하면 "mainActivity"로 바로 돌아가며, 특별한 추가 구현 없이 ID의 값만 해당 시스템 아이디로 설정하는 것으로 기능을 구현할 수 있습니다.

액티비티간의 상호 작용에 대한 이해
Long key 이벤트 처리
만약 long key 이베트를 처리할 필요가 있다면 직접 해당 이벤트 리스너를 추가해야 합니다. 아래는 그 과정입니다.
버튼 컨트롤의 속성 창에서 Long Click Timeout과 Long Click event trigger interval time을 다음 그림과 같이 설정합니다.(단위 : 밀리세컨드)

속성 설정 후 컴파일을 하고 해당 파일의 Logic.cc파일을 열어 파일의 시작 부분에
ZKBase::ILongClickListener클래스를 상속받는class LongClickListener와virtual void onLongClick(ZKBase *pBase)함수를 구현합니다.namespace { // Add an anonymous scope to prevent multiple source files from defining the same class // name and conflict at runtime // Realize the long press monitoring interface class LongClickListener : public ZKBase::ILongClickListener { virtual void onLongClick(ZKBase *pBase) { LOGD("Trigger long press event"); static int count = 0; char buf[128] = {0}; snprintf(buf, sizeof(buf), "Long press event trigger times %d", ++count); //Each time a long press event is triggered, modify the text of the button mLongButtonPtr->setText(buf); } }; }class LongClickListener의 오브젝트 생성static LongClickListener longButtonClickListener;static void onUI_init()함수에서 long click 모니터링 인터페이스를 등록하는 함수를 추가static void onUI_init(){ //Register the button long press monitoring interface mLongButtonPtr->setLongClickListener(&longButtonClickListener); }static void onUI_quit()함수에 long click 모니터링 인터페이스를 등록을 해제하는 함수를 추가static void onUI_quit() { //Un-register the button long press monitoring interface mLongButtonPtr->setLongClickListener(NULL); }코드 추가 후 컴파일, 다운로드하여 보드에서 테스트하십시오. 만약 버튼의 텍스트가 변경되었다면
onLongClick함수가 성공적으로 동작하였음을 의미합니다.
버튼 터치 이벤트 처리
만약 버튼 컨트롤에 press 또는 lift 이벤트에 대한 응답이 필요하다면 터치 모니터링 인터페이스를 등록하여 구현할 수 있습니다. 아래는 예제 코드입니다.
사용자만의 터치 모니터링 인터페이스 구현
namespace { // Add an anonymous scope to prevent multiple source files from defining the same class name // and conflict at runtime // Implement touch monitoring interface class TouchListener : public ZKBase::ITouchListener { public: virtual void onTouchEvent(ZKBase *pBase, const MotionEvent &ev) { switch (ev.mActionStatus) { case MotionEvent::E_ACTION_DOWN: mTouchButtonPtr->setText("Press"); break; case MotionEvent::E_ACTION_UP: mTouchButtonPtr->setText("Lift"); break; default: break; } } }; }리스너 오브젝트 생성
static TouchListener sTouchListener;static void onUI_init()함수에 터치 모니터링 인터페이스 등록 코드 추가static void onUI_init() { //Register the button touch monitoring interface mTouchButtonPtr->setTouchListener(&sTouchListener); }static void onUI_quit()함수에 터치 모니터링 인터페이스 등록 해제 코드 추가static void onUI_quit() { //Un-register the button touch monitoring interface mTouchButtonPtr->setTouchListener(NULL); }코드 추가 후 컴파일, 다운로드하여 보드에서 테스트하십시오.
예제 코드
예제 코드의 ButtonDemo 프로젝트를 참고하십시오
프리뷰 화면 :