編輯:關於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); } }
如果實現上下或者左右翻頁效果,我們借助下這個開源項目:https://github.com/openaphid/android-flip Aphid FlipView是一
接上一篇《Android開發性能優化總結(一)》 一、安卓UI性能檢測與優化UI是安卓應用程序與用戶打交道的最直接途徑,UI設計的好不好,直接影響到用戶的體驗,
本文代碼以MTK平台Android 4.4為分析對象,與Google原生AOSP有些許差異,請讀者知悉。 本文主要介紹sim卡數據的讀取過程,當射頻狀態處於
SlidingMenu側滑菜單是一種比較新的設置界面或配置界面的效果,在主界面左滑或者右滑出現設置界面效果,能方便的進行各種操作。很多優秀的應用都采用了這種界面方案,像f