Android里面用XML定義菜單資源
Android里面也可用XML定義菜單資源,菜單分兩種,一種是OptionMenu(點(diǎn)系統(tǒng)"Menu"鍵出來),一種是ContextMenu
下面定義兩種菜單XML到res\menu文件夾下
my_menu為OptionMenu
- <?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>
- <!-- 定義一組單選菜單項(xiàng) -->
- <group android:checkableBehavior="single">
- <!-- 定義多個(gè)菜單項(xiàng) -->
- <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>
- <!-- 定義一個(gè)普通菜單項(xiàng) -->
- <item android:id="@+id/plain_item"
- android:title="@string/plain_item">
- </item>
- <item android:id="@string/font_color"
- android:title="@drawable/color">
- <menu>
- <!-- 定義一組普通的菜單項(xiàng) -->
- <group>
- <!-- 定義3個(gè)菜單項(xiàng) -->
- <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
- <?xml version="1。0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas。android。com/apk/res/android" >
- <!-- 定義一組單選菜單項(xiàng)目 -->
- <group android:checkableBehavior="single">
- <!-- 定義三個(gè)菜單項(xiàng) -->
- <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>
定義兩個(gè)res\value下的xml,用來指定顏色,字體
- <?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
- <?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">藍(lán)色</string>
- <string name="green_title">綠色</string>
- <string name="font_size">字體大小</string>
- <string name="font_color">字體顏色</string>
- <string name="plain_item">普通菜單項(xiàng)</string>
- <string name="font_10">10號(hào)字體</string>
- <string name="font_12">12號(hào)字體</string>
- <string name="font_14">14號(hào)字體</string>
- <string name="font_16">16號(hào)字體</string>
- <string name="font_18">18號(hào)字體</string>
- </resources>
下面代碼將實(shí)現(xiàn)兩種菜單
- 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);
- //為文本框注冊(cè)上下文菜單
- registerForContextMenu(txt);
- }
- public boolean onCreateOptionsMenu(Menu menu)
- {
- MenuInflater inflator = new MenuInflater(this);
- //裝填R.menu.my_menu對(duì)應(yīng)的菜單,并添加到menu中
- inflator.inflate(R.menu.my_menu, menu);
- return super.onCreateOptionsMenu(menu);
- }
- //每次創(chuàng)建上下文菜單時(shí)都會(huì)觸發(fā)該方法
- public void onCreateContextMenu(ContextMenu menu,View source,
- ContextMenu.ContextMenuInfo menuInfo)
- {
- MenuInflater inflator = new MenuInflater(this);
- //裝填R.menu.context對(duì)應(yīng)的菜單,并添加到menu中
- inflator.inflate(R.menu.context, menu);
- menu.setHeaderIcon(R.drawable.tools);
- menu.setHeaderTitle("請(qǐng)選擇背景色");
- }
- //上下文菜單中菜單項(xiàng)被單擊時(shí)觸發(fā)該方法
- 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;
- }
- //菜單項(xiàng)被單擊后的回調(diào)方法
- public boolean onOptionsItemSelected(MenuItem mi)
- {
- //判斷單擊的是哪個(gè)菜單項(xiàng),并針對(duì)性地做出響應(yīng)
- 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, "您單擊了普通項(xiàng)菜單", Toast.LENGTH_SHORT);
- toast.show();
- break;
- }
- return true;
- }
- }
下面是程序運(yùn)行效果圖,剛啟動(dòng)時(shí)是一個(gè)TextView
點(diǎn)擊后,在手機(jī)屏幕下方出現(xiàn)OptionMenu
點(diǎn)擊字體大小或普通菜單項(xiàng),出現(xiàn)子菜單
選擇就可改變TextView的字體
如下點(diǎn)擊"普通菜單項(xiàng)",會(huì)出現(xiàn)一個(gè)Toast提示,過幾秒就會(huì)消失
那么怎么彈出ContextMenu呢,就是對(duì)著TextView長(zhǎng)按就可以了
選擇后,背景色就改變了