본문 바로가기
안드로이드+자바

안드로이드 액션바, 옵션메뉴 만드는 법!

by 문자메일 2017. 1. 3.

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- app:showAsAction = "always" 일 경우 상단 액션바 메뉴에 나타난다. -->
<item
android:title="action1"
android:icon ="@drawable/aa"
android:id="@+id/action_menu1"
android:orderInCategory="1"
app:showAsAction="always" />
<item
android:title="action2"
android:icon="@drawable/bb"
android:id="@+id/action_menu2"
android:orderInCategory="2"
app:showAsAction="always" />
<item
android:title="action3"
android:icon="@drawable/cc"
android:id="@+id/action_menu3"
android:orderInCategory="3"
app:showAsAction="always" />
<item
android:title="menu01"
android:id="@+id/menu01" />
<item
android:title="menu02"
android:id="@+id/menu02"/>
<item android:title="menu03"
android:id="@+id/menu03" />
</menu>


먼저 res를 우클릭 한다음 new - Directory 를 클릭하고 menu를 입력하고 확인 누릅니다.

그러면 위처럼 menu 디렉터리가 생성됩니다.


그다음 위에 코드처럼 <item>안에 정보를 입력합니다.

app:showAsAction="always" 

이 부분을 입력하면 입력된 item은 밑에 나오는 사진에서 볼 수 있듯이 액션바에 메뉴가 나타납니다.


 


잘 따라하셨다면 Design화면에 저렇게 나올 겁니다.





이제 java코드로 들어가면

package firebase.androidhive.info.example;

import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
}


//옵션 메뉴를 만든다. 액션바 + 메뉴
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu)
;
return super.onCreateOptionsMenu(menu)
;
}


//메뉴를 눌렀을 때 이벤트 처리
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.action_menu1:
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show()
;
break;
case R.id.action_menu2:
Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT).show()
;
break;
case R.id.action_menu3:
Toast.makeText(getApplicationContext(), "3", Toast.LENGTH_SHORT).show()
;
break;
case R.id.menu01:
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show()
;
break;
case R.id.menu02:
Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT).show()
;
break;
case R.id.menu03:
Toast.makeText(getApplicationContext(), "3", Toast.LENGTH_SHORT).show()
;
break;
}


//onOptionsItemSelected 리스너가 받아들인 메뉴의 타이틀을 보여준다.
textView.setText(item.getTitle().toString());
return super.onOptionsItemSelected(item);
}
}

​위에서 굵게 표시한 onCreateOptionsMenu, onOptionsItemSelected 메서드를 만들어야 합니다. (ctrl+o누르시고 찾으시면 편합니다.)

onCreateOptionsMenu(){

 getMenuInflater().inflate(R.menu.main, menu);

 //이부분은 우리가만든 menu.xml파일을 inflater 하는 부분입니다.

}​

//이 메서드는 우리가 메뉴를 선택하였을 때 자동으로 호출되며,

    item에 우리가 누른 버튼의 정보가 담겨있습니다.

    따라서 item.getItemId()로 반환되는 id값으로 어떤 메뉴를 눌렀는지 확인하고

    이벤트를 입력합니다.

onOptionsItem​Selected(MenuItem item){


}​
 

댓글