初學Android,使用菜單資源(十九)
系統
1884 0
Android里面也可用XML定義菜單資源,菜單分兩種,一種是OptionMenu(點系統"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>
<!-- 定義一組單選菜單項 -->
<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
?
<?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
?
<?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">藍色</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>
下面代碼將實現兩種菜單
?
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,使用菜單資源(十九)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元