Android里面用XML定义菜单资源
16lz
2022-06-10
Android里面也可用XML定义菜单资源,菜单分两种,一种是OptionMenu(点系统"Menu"键出来),一种是ContextMenu
下面定义两种菜单XML到res\menu文件夹下
my_menu为OptionMenu
[html] view plain copy print ?- <?xmlversion="1.0"encoding="utf-8"?>
- <menuxmlns:android="http://schemas.android.com/apk/res/android">
- <itemandroid:title="@string/font_size"
- android:icon="@drawable/font">
- <menu>
- <!--定义一组单选菜单项-->
- <groupandroid:checkableBehavior="single">
- <!--定义多个菜单项-->
- <itemandroid:id="@+id/font_10"
- android:title="@string/font_10"/>
- <itemandroid:id="@+id/font_12"
- android:title="@string/font_12"/>
- <itemandroid:id="@+id/font_14"
- android:title="@string/font_14"/>
- <itemandroid:id="@+id/font_16"
- android:title="@string/font_16"/>
- <itemandroid:id="@+id/font_18"
- android:title="@string/font_18"/>
- </group>
- </menu>
- </item>
- <item>
- </item>
- <!--定义一个普通菜单项-->
- <itemandroid:id="@+id/plain_item"
- android:title="@string/plain_item">
- </item>
- <itemandroid:id="@string/font_color"
- android:title="@drawable/color">
- <menu>
- <!--定义一组普通的菜单项-->
- <group>
- <!--定义3个菜单项-->
- <itemandroid:id="@+id/red_font"
- android:title="@string/red_title"/>
- <itemandroid:id="@+id/green_font"
- android:title="@string/green_title"/>
- <itemandroid:id="@+id/blue_font"
- android:title="@string/blue_title"/>
- </group>
- </menu>
- </item>
- </menu>
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:title="@string/font_size" android:icon="@drawable/font"> <menu> <!-- 定义一组单选菜单项 --> <group android:checkableBehavior="single"> <!-- 定义多个菜单项 --> <item android:id="@+id/font_10" android:title="@string/font_10"/> <item android:id="@+id/font_12" android:title="@string/font_12"/> <item android:id="@+id/font_14" android:title="@string/font_14"/> <item android:id="@+id/font_16" android:title="@string/font_16"/> <item android:id="@+id/font_18" android:title="@string/font_18"/> </group> </menu> </item> <item> </item> <!-- 定义一个普通菜单项 --> <item android:id="@+id/plain_item" android:title="@string/plain_item"> </item> <item android:id="@string/font_color" android:title="@drawable/color"> <menu> <!-- 定义一组普通的菜单项 --> <group> <!-- 定义3个菜单项 --> <item android:id="@+id/red_font" android:title="@string/red_title"/> <item android:id="@+id/green_font" android:title="@string/green_title"/> <item android:id="@+id/blue_font" android:title="@string/blue_title"/> </group> </menu> </item></menu>context.xml为ContextMenu [html] view plain copy print ?
- <?xmlversion="1.0"encoding="utf-8"?>
- <menuxmlns:android="http://schemas.android.com/apk/res/android">
- <!--定义一组单选菜单项目-->
- <groupandroid:checkableBehavior="single">
- <!--定义三个菜单项-->
- <itemandroid:id="@+id/red"
- android:title="@string/red_title"
- android:alphabeticShortcut="r"></item>
- <itemandroid:id="@+id/green"
- android:title="@string/green_title"
- android:alphabeticShortcut="g"></item>
- <itemandroid:id="@+id/blue"
- android:title="@string/blue_title"
- android:alphabeticShortcut="b"></item>
- </group>
- </menu>
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 定义一组单选菜单项目 --> <group android:checkableBehavior="single"> <!-- 定义三个菜单项 --> <item android:id="@+id/red" android:title="@string/red_title" android:alphabeticShortcut="r"></item> <item android:id="@+id/green" android:title="@string/green_title" android:alphabeticShortcut="g"></item> <item android:id="@+id/blue" android:title="@string/blue_title" android:alphabeticShortcut="b"></item> </group></menu>定义两个res\value下的xml,用来指定颜色,字体
colors.xml
[html] view plain copy print ?- <?xmlversion="1.0"encoding="UTF-8"?>
- <resources>
- <colorname="red">#ff0000</color>
- <colorname="green">#00ff00</color>
- <colorname="blue">#0000ff</color>
- </resources>
<?xml version="1.0" encoding="UTF-8"?><resources><color name="red">#ff0000</color><color name="green">#00ff00</color><color name="blue">#0000ff</color></resources>
strings.xml [html] view plain copy print ?
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <stringname="hello">HelloWorld,ContextMenuTest!</string>
- <stringname="app_name">上下文菜单</string>
- <stringname="red_title">红色</string>
- <stringname="blue_title">蓝色</string>
- <stringname="green_title">绿色</string>
- <stringname="font_size">字体大小</string>
- <stringname="font_color">字体颜色</string>
- <stringname="plain_item">普通菜单项</string>
- <stringname="font_10">10号字体</string>
- <stringname="font_12">12号字体</string>
- <stringname="font_14">14号字体</string>
- <stringname="font_16">16号字体</string>
- <stringname="font_18">18号字体</string>
- </resources>
<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, ContextMenuTest!</string><string name="app_name">上下文菜单</string><string name="red_title">红色</string><string name="blue_title">蓝色</string><string name="green_title">绿色</string><string name="font_size">字体大小</string><string name="font_color">字体颜色</string><string name="plain_item">普通菜单项</string><string name="font_10">10号字体</string><string name="font_12">12号字体</string><string name="font_14">14号字体</string><string name="font_16">16号字体</string><string name="font_18">18号字体</string></resources>
下面代码将实现两种菜单 [java] view plain copy print ?
- packageWangLi.Resource.MenuResTest;
- importandroid.app.Activity;
- importandroid.graphics.Color;
- importandroid.os.Bundle;
- importandroid.view.ContextMenu;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassMenuResTestextendsActivity{
- /**Calledwhentheactivityisfirstcreated.*/
- privateTextViewtxt;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- txt=(TextView)findViewById(R.id.txt);
- //为文本框注册上下文菜单
- registerForContextMenu(txt);
- }
- publicbooleanonCreateOptionsMenu(Menumenu)
- {
- MenuInflaterinflator=newMenuInflater(this);
- //装填R.menu.my_menu对应的菜单,并添加到menu中
- inflator.inflate(R.menu.my_menu,menu);
- returnsuper.onCreateOptionsMenu(menu);
- }
- //每次创建上下文菜单时都会触发该方法
- publicvoidonCreateContextMenu(ContextMenumenu,Viewsource,
- ContextMenu.ContextMenuInfomenuInfo)
- {
- MenuInflaterinflator=newMenuInflater(this);
- //装填R.menu.context对应的菜单,并添加到menu中
- inflator.inflate(R.menu.context,menu);
- menu.setHeaderIcon(R.drawable.tools);
- menu.setHeaderTitle("请选择背景色");
- }
- //上下文菜单中菜单项被单击时触发该方法
- publicbooleanonContextItemSelected(MenuItemmi)
- {
- switch(mi.getItemId())
- {
- caseR.id.red:
- mi.setChecked(true);
- txt.setBackgroundColor(Color.RED);
- break;
- caseR.id.green:
- mi.setChecked(true);
- txt.setBackgroundColor(Color.GREEN);
- break;
- caseR.id.blue:
- mi.setChecked(true);
- txt.setBackgroundColor(Color.BLUE);
- break;
- }
- returntrue;
- }
- //菜单项被单击后的回调方法
- publicbooleanonOptionsItemSelected(MenuItemmi)
- {
- //判断单击的是哪个菜单项,并针对性地做出响应
- switch(mi.getItemId())
- {
- caseR.id.font_10:
- txt.setTextSize(10*2);
- break;
- caseR.id.font_12:
- txt.setTextSize(12*2);
- break;
- caseR.id.font_14:
- txt.setTextSize(14*2);
- break;
- caseR.id.font_16:
- txt.setTextSize(16*2);
- break;
- caseR.id.font_18:
- txt.setTextSize(18*2);
- break;
- caseR.id.red_font:
- txt.setTextColor(Color.RED);
- mi.setChecked(true);
- break;
- caseR.id.green_font:
- txt.setTextColor(Color.GREEN);
- mi.setChecked(true);
- break;
- caseR.id.blue_font:
- txt.setTextColor(Color.BLUE);
- mi.setChecked(true);
- break;
- caseR.id.plain_item:
- Toasttoast=Toast.makeText(MenuResTest.this,"您单击了普通项菜单",Toast.LENGTH_SHORT);
- toast.show();
- break;
- }
- returntrue;
- }
- }
package WangLi.Resource.MenuResTest;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class MenuResTest extends Activity { /** Called when the activity is first created. */private TextView txt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txt = (TextView)findViewById(R.id.txt); //为文本框注册上下文菜单 registerForContextMenu(txt); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflator = new MenuInflater(this); //装填R.menu.my_menu对应的菜单,并添加到menu中 inflator.inflate(R.menu.my_menu, menu); return super.onCreateOptionsMenu(menu); } //每次创建上下文菜单时都会触发该方法 public void onCreateContextMenu(ContextMenu menu,View source, ContextMenu.ContextMenuInfo menuInfo) { MenuInflater inflator = new MenuInflater(this); //装填R.menu.context对应的菜单,并添加到menu中 inflator.inflate(R.menu.context, menu); menu.setHeaderIcon(R.drawable.tools); menu.setHeaderTitle("请选择背景色"); } //上下文菜单中菜单项被单击时触发该方法 public boolean onContextItemSelected(MenuItem mi) { switch(mi.getItemId()) { case R.id.red: mi.setChecked(true); txt.setBackgroundColor(Color.RED); break; case R.id.green: mi.setChecked(true); txt.setBackgroundColor(Color.GREEN); break; case R.id.blue: mi.setChecked(true); txt.setBackgroundColor(Color.BLUE); break; } return true; } //菜单项被单击后的回调方法 public boolean onOptionsItemSelected(MenuItem mi) { //判断单击的是哪个菜单项,并针对性地做出响应 switch(mi.getItemId()) { case R.id.font_10: txt.setTextSize(10*2); break; case R.id.font_12: txt.setTextSize(12*2); break; case R.id.font_14: txt.setTextSize(14*2); break; case R.id.font_16: txt.setTextSize(16*2); break; case R.id.font_18: txt.setTextSize(18*2); break; case R.id.red_font: txt.setTextColor(Color.RED); mi.setChecked(true); break; case R.id.green_font: txt.setTextColor(Color.GREEN); mi.setChecked(true); break; case R.id.blue_font: txt.setTextColor(Color.BLUE); mi.setChecked(true); break; case R.id.plain_item: Toast toast = Toast.makeText(MenuResTest.this, "您单击了普通项菜单", Toast.LENGTH_SHORT); toast.show(); break; } return true; }}
下面是程序运行效果图,刚启动时是一个TextView
点击后,在手机屏幕下方出现OptionMenu
点击字体大小或普通菜单项,出现子菜单
选择就可改变TextView的字体
如下点击"普通菜单项",会出现一个Toast提示,过几秒就会消失
那么怎么弹出ContextMenu呢,就是对着TextView长按就可以了
选择后,背景色就改变了
更多相关文章
- Android学习系列(40)--Android主题和样式之系统篇(下)
- Android的底层库libutils介绍
- 50 Android(安卓)Hack 读书笔记
- android 自定义ButtonTab , ActivityGroup 动态加载 activity
- Theme(主题) Style(风格)
- 自定义 Android(安卓)Preference——SpinnerPreference的私人定
- android 自定义ButtonTab , ActivityGroup 动态加载 activity
- AIDL简单实例
- Android权限问题