kitty_lovely
이벤트 처리 이해하기 본문
위임 모델 (Delegation Model)
: 이벤트 처리 방식은 화면에서 발생하는 이벤트를 버튼과 같은 위젯 객체에 전달한 후 그이후의 처리 과정을 버튼에 위임
boolean onTouchEvent (MotionEvent event)
boolean onKeyDown (int keyCode, KeyEvent event)
boolean onKeyUp (int keyCode, KeyEvent event)
View.OnTouchListener : boolean onTouch(View v, MotionEvent event)
View.OnKeyListener : boolean onKey (View v, int keyCode, KeyEvent event)
View.OnClickListener : void onClick (View v)
View.OnFocusChangeListener : void onFocusChange (View v, boolean hasFocus)
방향 전환에 대한 이벤트 처리
<activity
android:name=".MainActivity"
android:exported="true"
android:configChanges="orientation|screenSize|keyboardHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
android:configChanges="orientation|screenSize|keyboardHidden"
- 단말의 방향이 바뀔 때마다 액티비티에서 인식할 수 있고,
- 단말의 방향이 바뀌는 시점에 configurationChanged 메서드가 자동으로 호출됨.
- keyboardHidden 값은 단말의 방향 전환과는 관련이 없지만 자주 사용되는 값 중의 하나임.
- keyboardHidden 값은 액티비티가 보일 때 키패드가 자동으로 나타나지 않도록 하고, 키패드가 보여야 할 시점을 액티비티 쪽에 알려주기만 함.
package com.example.sampleorientation2;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.menu.ShowableListMenu;
import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
showToast("방향 : ORIENTATION_LANDSACPE");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
showToast("방향 : ORIENTATION_PORTRAIT");
}
}
public void showToast(String data) {
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
}
- onConfigurationChanged 메서드가 호출될 때 전달되는 Configuration 객체에는 orientation 속성이 들어 있어 단말의 방향이 가로로 바뀌었는지 아니면 세로로 바뀌었는지 알 수 있다.
<activity
android:name=".MainActivity"
android:screenOrientation="landscape"
android:exported="true"
android:configChanges="orientation|screenSize|keyboardHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
android:screenOrientation="landscape"
- 해당 속성을 지정하면, 앱을 실행할 때에 가로 모드로 실행이 된다.
'안드로이드 > 드로어블 및 이벤트 처리' 카테고리의 다른 글
| 드로어블(Drawable) (0) | 2023.03.13 |
|---|