안드로이드에서 제공하는 View Object에서는 사용자의 Event를 처리할 수 있도록 callback method를 제공하며 이에 적절한 listner를 구현하여 사용하면 된다.
하지만 개발자가 정의한 View Object는 handler를 정의하여 사용하도록 한다.
Event Listners
Event Listner는 single callback method를 포함하는 View Object의 Interface이다.
사용자의 Event가 발생하면 안드로이드 Framework은 해당 View에 등록되어 있는 Listner를 호출한다.
View Object에서 제공하는 Callback method는 다음과 같다.
onClick(), onLongClick(), onFocusChange(), onKey(), onTouch(), onCreateContext()
이러한 method를 정의하고 사용자 event를 다루기 위해서는 해당 View Object의 Event에 해당하는 Listner를 구현하고 이들 등록해서 사용한다.
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
또는
mPickTime = (Button) findViewById(R.id.pickTime);
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
또는
mPickTime = (Button) findViewById(R.id.pickTime);
// add a click listener to the button
mPickTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
mPickTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
Evnet Handlers
View Object를 상속하여 사용자가 정의하는 Component를 만드는 경우 사용할 기본 handler로서 callback method를 정의해야 한다.
Event를 다루기 위해 사용되는 일반적인 callback method는 다음과 같다.
onKeyDown(), onLeyUp(), on TrackballEvent(), onTouchEvent(), onFocusChanged()
Touch Mode
단말기가 Touch Mode인지를 확인하기 위해서는 isInTouch() method를 사용하여 확인한다.
Handling Focus
View Class가 Focus를 가지는지 확인하기 위해서는 isFocusable()을 통해 확인할 수 있으며, View Class의 Focus를 변경하기 위해서 setFocusable() method를 사용한다.
단말이 Touch Mode일 경우는 isFocusableInTouchMode()와 setFocusableInTouchMode()를 사용할 수 있다.
이러한 Focus의 변경은 XML을 통해서도 정의가 가능하다.
<LinearLayout
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
<Button android:id="@+id/bottom"
android:nextFocusDown="@+id/top"
... />
</LinearLayout>
nextFocusDown, nextFocusLeft, nextFocusRight, and nextFocusUp 사용할 수 있으며,
Focus변경을 위해 android:focusable 또는 android:focusableInTouchMode를 사용한다.
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
<Button android:id="@+id/bottom"
android:nextFocusDown="@+id/top"
... />
</LinearLayout>
nextFocusDown, nextFocusLeft, nextFocusRight, and nextFocusUp 사용할 수 있으며,
Focus변경을 위해 android:focusable 또는 android:focusableInTouchMode를 사용한다.