Android StudioOverflow menu 만들기

menu layout 만들기



우선 res folder->new->Directory로 menu folder를 만든다
그리고 menu folder->new->Menu resource file(xml) 만들기

menu layout 쓰기



menu layout의 xml에 아래와 같이 (4개의) item을 만든다.

menu_overflow.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/user" android:title="user"/>
    <item android:id="@+id/login" android:title="login"/>
    <item android:id="@+id/setting" android:title="setting"/>
    <item android:id="@+id/logout" android:title="logout"/>

</menu>

onCreateOptionMenu()로 Menu를 Activity로 생성



사용자가 menu를 탭하거나 Activity.openOptionsMenu()를 호출하면 onCreateOptionMenu(Menu menu)가 호출되는 것 같습니다.
Android에서 menu의 Layout 정보를 menu로 패스하고, 그것을 parent로 하고, item 정보가 들어간 xml을 inflate하고, 다시 한번 menu를 던진 onCreateOptionMenu()를 리턴하면 좋을 것 같습니다.
*getLayoutInflator(x)getMenuInflator(O)

MainActivity.java

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_overflow,menu);
        return super.onCreateOptionsMenu(menu);
    }

여기까지 하면, 이미 menu가 되어 있을 것입니다. 그러나 item을 탭해도 반응하지 않습니다.


onOptionsItemSelected()



이 방법으로 각 항목의 반응을 쉽게 설정합니다. MenuItem의 item에서 사용자가 탭한 item의 Id를 getItemId()로 취득해, R.id.itemId와 대조해, 반응을 설정합니다.

MainActvity.java
@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId())
        {
            case R.id.user:
                Toast.makeText(this,"user_activity",Toast.LENGTH_SHORT).show();
                return true;

            case R.id.login:
                Toast.makeText(this,"user_login",Toast.LENGTH_SHORT).show();
                return true;

            case R.id.setting:
                Toast.makeText(this,"user_setting",Toast.LENGTH_SHORT).show();
                return true;

            case R.id.logout:
                Toast.makeText(this,"user_logout",Toast.LENGTH_SHORT).show();
                return true;

            //defalt will return false if none of the case is meet
            default:
                return super.onOptionsItemSelected(item);

        }

    }

이상은 현시점의 각서입니다.

좋은 웹페이지 즐겨찾기