한 걸음 두 걸음

android ActionBar에 Icon 붙이기 본문

FrontEnd/Android

android ActionBar에 Icon 붙이기

언제나 변함없이 2019. 4. 8. 15:59
반응형

1. MainActivity와 같은 extends AppCompatActivity를 가진 곳에 붙이기


menu폴더 만들어 내부에 menu.xml 파일을 만들어줍니다.

menu.xml폴더 내용은 다음과 같을 수 있습니다. 원하는대로 편집해서 사용하세요
image등.

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


    <item android:title="새로고침"
    android:id="@+id/menu_refresh"
    android:icon="@drawable/ic_launcher_background"
    app:showAsAction="always" />

    <item android:title="검색"
        android:id="@+id/menu_search"
        android:icon="@drawable/ic_launcher_foreground"
        app:showAsAction="always" />
    <item android:title="새로고침"
        android:id="@+id/menu_settings"
        android:icon="@drawable/ic_launcher_background"
        app:showAsAction="always" />

</menu>

이렇게 만들어주었다면, MainActivity로 가서


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);//파라미터로 받은 메뉴에다가 붙여달라.
        return true;
    }

    //옵션메뉴가 선택됐을 때 자동으로 호출되는 콜백함수 (메뉴함수 선택 시 )
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //선택된 아이템
        int curId = item.getItemId();
        switch (curId){
            case R.id.menu_refresh:
                Toast.makeText(this,"새로고침 메뉴 클릭됨",Toast.LENGTH_SHORT).show();
            case R.id.menu_search:
                Toast.makeText(this,"검색 메뉴 클릭됨",Toast.LENGTH_SHORT).show();
            case R.id.menu_settings:
                Toast.makeText(this,"옵션 메뉴 클릭됨",Toast.LENGTH_SHORT).show();
        }
        return super.onOptionsItemSelected(item);
    }
}

위와 같이 적어줍니다. 여기서 switch문 안에 원하는 동작을 넣어서 쓰시면 됩니다.

2. Fragment의 ActionBar에 붙이기

프래그먼트의 경우에는 위에서 쓴 menu.xml파일을 그대로 사용합니다. 그리고 프래그먼트를 상속받은 클래스 내부에서는 위에서 썼던 함수인

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);//파라미터로 받은 메뉴에다가 붙여달라.
        return true;
    }

가 작동하지 않습니다.

extends Fragment로 Fragment를 상속받은 클래스 내부에서는


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        mView = inflater.inflate(R.layout.activity_notice_board, null);
        init(mView);
        setHasOptionsMenu(true);


        return mView;
    }

처럼 따로 만들어준 onCreateView내부에 setHasOptionMenu(true);설정을 해주고,


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
       inflater.inflate(R.menu.menu_main,menu);//파라미터로 받은 메뉴에다가 붙여달라.
    }

    //옵션메뉴가 선택됐을 때 자동으로 호출되는 콜백함수 (메뉴함수 선택 시 )
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //선택된 아이템
        int curId = item.getItemId();
        switch (curId){
            case R.id.menu_enroll:
                //Intent intent = new Intent(getApplicationContext(),NoticeEnrollActivity.class);
                Toast.makeText(getContext(),"글을 작성합니다.",Toast.LENGTH_SHORT).show();
                //startActivity(intent);
                break;
        }
        return super.onOptionsItemSelected(item);
    }

위와같이 onCreateOptionsMenu를 변경하여 적용시킵니다. 여기서 저는 OptionItem을 하나만 썼기에 switch문이 살짝 바뀌어있는 것을 확인하실 수 있습니다.

반응형