kitty_lovely

이벤트 처리 이해하기 본문

안드로이드/드로어블 및 이벤트 처리

이벤트 처리 이해하기

kitty_cat 2023. 3. 17. 16:04

위임 모델 (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