안드로이드의 메뉴 3대장
1. 외부 메뉴 버튼
2. 액션 메뉴 버튼
3. 컨텍스트 메뉴 버튼
이 중에서 1,2 번 메뉴는 서로 왔다리갔다리 할 수 있다.
외부 메뉴버튼을 누르면 앱 하단부에 stack 형식으로 메뉴가 나타나게 되는데,
이 메뉴를 앱 상단부 타이틀바 부근에다가 갖다가 붙이는 방법이 있다.
그 방법을 알아보자
[하드코딩으로 메뉴 만들기]
MainActivity.java 파일에다가 아래 함수를 overriding
하드코딩이라는 어감이 너무 안좋으니 smarter 한 방법을 생각 해 본다면,
메뉴도 나름 GUI 이기 때문에 res/layout 형식으로 xml 리소스로 빼보자.
[리소스를 활용한 메뉴 만들기]
res/menu 리소스디렉토리를 생성한 후 item_view.xml 파일을 생성하자.
MainActivity.java 파일에다가 아래 함수를 overriding
MenuInflag 객체를 이용해서 res/menu에 생성한 xml 파일을 import!
[액션 메뉴로 추가시키기]
app 이라는 프로퍼티는 아래처럼 따로 정의된 스키마 소스를 임포트 해줘야 정상 동작 한다.
[컨텍스트 메뉴 만들기]
컨텍스트 메뉴를 만들기 위해서는 TextView를 하나 선언해서 메뉴가 들어갈 view를 생성해 주어야 한다.
MainActivity.java
res/menu/context_item_list.xml
1. 외부 메뉴 버튼
2. 액션 메뉴 버튼
3. 컨텍스트 메뉴 버튼
이 중에서 1,2 번 메뉴는 서로 왔다리갔다리 할 수 있다.
외부 메뉴버튼을 누르면 앱 하단부에 stack 형식으로 메뉴가 나타나게 되는데,
이 메뉴를 앱 상단부 타이틀바 부근에다가 갖다가 붙이는 방법이 있다.
그 방법을 알아보자
[하드코딩으로 메뉴 만들기]
MainActivity.java 파일에다가 아래 함수를 overriding
@Overridepublic boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0,0,0,R.string.share); menu.add(0,1,0,R.string.delete); return true; }
하드코딩이라는 어감이 너무 안좋으니 smarter 한 방법을 생각 해 본다면,
메뉴도 나름 GUI 이기 때문에 res/layout 형식으로 xml 리소스로 빼보자.
[리소스를 활용한 메뉴 만들기]
res/menu 리소스디렉토리를 생성한 후 item_view.xml 파일을 생성하자.
<item android:id="@+id/shareMenu" android:title="@string/share" android:icon="@android:drawable/ic_menu_share"/> <item android:id="@+id/deleteMenu" android:title="@string/delete" android:icon="@android:drawable/ic_menu_delete"/>
추가할 메뉴 항목을 item tag로 만들자.
MainActivity.java 파일에다가 아래 함수를 overriding
@Overridepublic boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.item_view, menu); return true; }
MenuInflag 객체를 이용해서 res/menu에 생성한 xml 파일을 import!
[액션 메뉴로 추가시키기]
메뉴 3대장의 1,2 항목을 여기뗐다 저기붙였다가 하는 부분이 바로 app:showAsAction 프로퍼티다.
아래처럼 res/menu/list_view.xml 파일의 showAsAction 프로퍼티에 ifRoom 이라는 값을 넣으면 1번 항목의 메뉴가 2번 항목의 메뉴로 이동하게 된다.(ifRoom 이라는 값 처럼 공간이 있다면)
<item android:id="@+id/shareMenu" android:title="@string/share" android:icon="@android:drawable/ic_menu_share" app:showAsAction="ifRoom"/> <item android:id="@+id/deleteMenu" android:title="@string/delete" android:icon="@android:drawable/ic_menu_delete" app:showAsAction="ifRoom"/>
app 이라는 프로퍼티는 아래처럼 따로 정의된 스키마 소스를 임포트 해줘야 정상 동작 한다.
xmlns:app="http://schemas.android.com/apk/res-auto"
[컨텍스트 메뉴 만들기]
컨텍스트 메뉴를 만들기 위해서는 TextView를 하나 선언해서 메뉴가 들어갈 view를 생성해 주어야 한다.
MainActivity.java
private TextView listView; private void setEvent(){ listView = (TextView)findViewById(R.id.listView); registerForContextMenu(listView); }
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(0,MENU_MAKE_COMPLETE,0,R.string.complete); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_item_list, menu); }
res/menu/context_item_list.xml
<item android:id="@+id/deleteMenu" android:title="@string/delete"></item>
댓글 없음:
댓글 쓰기