編輯:關於Android編程
OptionsMenu 選項菜單(系統菜單 )
OptionsMenu:系統級別菜單
菜單的使用步驟:
1. res裡的menu裡添加布局 在布局裡寫菜單項
2. 在邏輯代碼中使用OnCreateOptionMenu()方法 將布局展示到菜單
3. 監聽菜單項 onOptionsItemSelected() 方法進行監聽 注意若設置圖片不顯示那麼打破封裝性修改源碼
案例
代碼
效果圖


解決辦法如下
package com.fmy.menu1;
import java.lang.reflect.Method;
import com.fmy.menu1.R;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.layout, menu);
//設置開啟圖片有效
setIconEnable(menu,true);
return super.onCreateOptionsMenu(menu);
}
//enable為true時,菜單添加圖標有效,enable為false時無效。4.0+系統默認無效
private void setIconEnable(Menu menu, boolean enable)
{
try
{
Class clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
//MenuBuilder實現Menu接口,創建菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特征)
m.invoke(menu, enable);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
XML中的一些屬性
案例1:
如果showAsAction設置為always 超出部分會怎麼樣
代碼:

案例2
用代碼注冊按鈕 和在xml中設置子菜單按鈕
在xml:

java代碼:
package com.fmy.menu1;
import java.lang.reflect.Method;
import com.fmy.menu1.R;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.layout, menu);
/**
* groupId --->> group的id值 即:放入哪個分組中
* itemId --->> 為這個item設置一個id 以後在監聽中可用到
* order --->> 順序
* title --->> 標題
*/
SubMenu sub = menu.addSubMenu(menu.NONE, 1, menu.NONE, "2");
sub.setIcon(R.drawable.ic_launcher);
sub.addSubMenu(1, 2, menu.NONE, "呵呵");
sub.addSubMenu(1, 2, menu.NONE, "哈哈");
sub.addSubMenu(menu.NONE, 2, menu.NONE, "你好朋友");
return super.onCreateOptionsMenu(menu);
}
}


案例3
監聽事件
xml 代碼:
java代碼:
package com.fmy.menu1;
import java.lang.reflect.Method;
import com.fmy.menu1.R;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.layout, menu);
//設置開啟圖片有效
setIconEnable(menu,true);
return super.onCreateOptionsMenu(menu);
}
//enable為true時,菜單添加圖標有效,enable為false時無效。4.0+系統默認無效
private void setIconEnable(Menu menu, boolean enable)
{
try
{
Class clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
//MenuBuilder實現Menu接口,創建菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特征)
m.invoke(menu, enable);
} catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.root:
Toast.makeText(this, "root", 0).show();
break;
case R.id.boy1:
Toast.makeText(this, "boy1", 0).show();
break;
case R.id.boy2:
Toast.makeText(this, "boy2", 0).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
android之實現上下左右翻頁效果
如果實現上下或者左右翻頁效果,我們借助下這個開源項目:https://github.com/openaphid/android-flip Aphid FlipView是一
Android開發性能優化總結(二)
接上一篇《Android開發性能優化總結(一)》 一、安卓UI性能檢測與優化UI是安卓應用程序與用戶打交道的最直接途徑,UI設計的好不好,直接影響到用戶的體驗,
Android4.4 Telephony流程分析——SIM卡開機時的數據加載
本文代碼以MTK平台Android 4.4為分析對象,與Google原生AOSP有些許差異,請讀者知悉。 本文主要介紹sim卡數據的讀取過程,當射頻狀態處於
Android UI之SlidingMenu側滑菜單
SlidingMenu側滑菜單是一種比較新的設置界面或配置界面的效果,在主界面左滑或者右滑出現設置界面效果,能方便的進行各種操作。很多優秀的應用都采用了這種界面方案,像f