메뉴가 열릴때마다 onPrepareOptionsMenu 메소드가 호출되는데 여기서 메뉴를 원하는대로 편집한다.
메뉴를 추가할 때는 add 메소드를 사용하며 삭제, 편집할 때는 다음 메소드를 호출한다.
void removeItem(int id)
void clear()
MenuItem findItem(int id)
MenuItem getItem(int index)
바로 실습에 들어가보자.
menu_modify.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.ch9_menu_modify.MenuModify" >
<item android:id="@+id/submenu"
android:title="Sub menu"
>
<menu>
<group android:id="@+id/checkable_group"
android:checkableBehavior="all">
<item android:id="@+id/bigfont"
android:title="BigFont"/>
</group>
<group android:id="@+id/exclusive_checkable_group"
android:checkableBehavior="single">
<item android:id="@+id/red"
android:title="Red"
android:checked="true"/>
<item android:id="@+id/green"
android:title="Green"/>
<item android:id="@+id/blue"
android:title="Blue"/>
</group>
</menu>
</item>
</menu>
여기서 checkableBehavior 속성 중 all은 모든 항목을 개별적으로 선택할 수 있고 single은 한개만 선택할 수 있다는것을 의미한다.
다음은 화면의 버튼 한 개를 정의하기 위한
activity_menu_modify.xml 파일입니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:text="Button"
android:textSize="20px"
/>
</LinearLayout>
다음은 MenuModify.java 파일입니다.
package com.example.ch9_menu_modify;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
public class MenuModify extends Activity {
Button mBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_modify);
mBtn = (Button)findViewById(R.id.button);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//XML로 정의된 메뉴를 가져오기위해서 전개자를 선언합니다.
MenuInflater inflater = getMenuInflater();
//여기가 XML을 이용해서 메뉴를 실제 정의하는 부분입니다.
inflater.inflate(R.menu.menu_modify, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//버튼의 텍스트 사이즈가 40이면
if(mBtn.getTextSize()==40){
menu.findItem(R.id.bigfont).setChecked(true);//체크해라
}else{
menu.findItem(R.id.bigfont).setChecked(false);
}
int color = mBtn.getTextColors().getDefaultColor();
//각컬러 별로 체크를 하게됨
if(color == Color.RED){
menu.findItem(R.id.red).setChecked(true);
}
if(color == Color.GREEN){
menu.findItem(R.id.green).setChecked(true);
}
if(color == Color.BLUE){
menu.findItem(R.id.blue).setChecked(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//선택된 아이템 아이디를 가져와서 그에 맞는 행동을 여기서 정의한다.
switch(item.getItemId()){
case R.id.bigfont:
//bigfontrk 체크되어있다면
if(item.isChecked()){
//체크를 풀게되므로 20으로 줄이고
mBtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20);
}else{//체크를 하게되므로 40으로 늘림
mBtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, 40);
}
return true;
//각 색상별로 텍스트 색깔을 바꾸게됨
case R.id.red:
mBtn.setTextColor(Color.RED);
return true;
case R.id.green:
mBtn.setTextColor(Color.GREEN);
return true;
case R.id.blue:
mBtn.setTextColor(Color.BLUE);
return true;
}
return true;
}
}
다음은 실행화면입니다. 어떤 식으로 메뉴가 편집되는지 살펴봅시다.
현재 BigFont가 체크 해제되어있고 Red로 되있네요. 한번 Green을 눌러보죠
버튼색깔이 작게 녹색으로 바꼈네요. 다시 메뉴를 보면
Green으로 라디오 버튼이 선택되어 있음을 알 수 있습니다.
응용해서 다음처럼도 만들 수 있죠.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 시간을 더욱 세련되게 표현하는 시계 위젯 만들기 (0) | 2015.08.08 |
---|---|
안드로이드 - 날짜 시간 나타내기 (0) | 2015.08.08 |
안드로이드 - 프로그래스바의 확장형 시크바 (SeekBar) 만들기 (0) | 2015.08.08 |
안드로이다 - 실행 중에 메뉴를 교체하기 (0) | 2015.08.08 |
안드로이드 - 프로그래스바(ProgressBar) 만들기 (0) | 2015.08.07 |
안드로이드 - 버튼에 팝업메뉴 만들기 (0) | 2015.08.02 |
안드로이드 - 뷰객체를 롱터치하면 나타나는 컨텍스트 메뉴 (0) | 2015.08.02 |
안드로이드 - XML로 메뉴 정의하기 (0) | 2015.08.01 |