Android開發之路六---UI組件
android提供了三種菜單類型,分別為options menu,context menu,sub menu。options menu就是通過按menu鍵來顯示,context menu需要在view上按上2s後顯示。這兩種menu都有可以加入子功能表,子功能表不能種不能嵌套子功能表。
options menu最多隻能在螢幕最下面顯示6個菜單選項,成為icon menu,icon menu不能有checkable選項。多餘6的會以more icon menu來調出,成為expanded menu。options menu通過activity的onCreateOptionsMenu來產生,這個函數只會在menu第一次產生時調用。任何想改變options menu的想法只能在onPrepareOptionsMenu來實現,這個函數會在menu顯示前調用。onOptionsItemSelected 處理選中的功能表項目。
context menu是跟某個具體的view綁定在一起,在activity種用registerForContextMenu來為某個view註冊context menu。context menu在顯示前都會調用onCreateContextMenu來產生menu。onContextItemSelected選中的功能表項目。
android還提供了對功能表項目進行分組的功能,可以把相似功能的功能表項目分成同一個組,這樣就可以通過調用setGroupCheckable,setGroupEnabled,setGroupVisible來設定菜單屬性,而無須單獨設定。
1、利用xml定義選項菜單
a) options menu通過activity的onCreateOptionsMenu來產生
b) 這個函數只會在menu第一次產生時調用。
i. 任何想改變options menu的想法只能在onPrepareOptionsMenu來實現,這個函數會在menu顯示前調用。
c) onOptionsItemSelected 用來處理選中的功能表項目。
1、 響應功能表項目單擊事件
3種方式
onMenuItemSelected(int featureId, MenuItem item)
public boolean onOptionsItemSelected (MenuItem item)
onMenuItemClick
2、 動態添加、修改和刪除功能表項目
功能表項目的增刪改查
增:add, addSubMenu
刪:removeItem,removeGroup
改:
l 選項菜單:onPrepareOptionsMenu()——> MenuItem->setXXX()
l 操作功能表:onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {} 方法在每次調用操作功能表時都會被調用一次
boolean cn.class3g.activity.MenuTestActivity.onPrepareOptionsMenu(Menu menu) public boolean onPrepareOptionsMenu (Menu menu) Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically modify the contents. The default implementation updates the system menu items based on the activity's state. Deriving classes should always call through to the base class implementation. Parameters
menu |
The options menu as last shown or first initialized by onCreateOptionsMenu(). |
Returns · You must return true for the menu to be displayed; if you return false it will not be shown. See Also onCreateOptionsMenu(Menu) |
private int i = 0; public boolean onPrepareOptionsMenu(Menu menu) { i++; MenuItem mi = menu.getItem(0); mi.setTitle(mi.getTitle() +""+ i); return super.onPrepareOptionsMenu(menu); } |
3、 子功能表的建立
l Xml建立
l 動態建立
Menu submenu = Menu.addSubMenu(x, x, x, x)
submenu.add()
submenu.add()
main_menu.addSubMenu(x,x,x,x);
或:
getMenuInflater ().inflater(R.menu.submenu, submenu);
4、 帶單選或複選的子功能表
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.second_menu, menu); SubMenu sb = menu.findItem(R.id.item3).getSubMenu(); sb.setIcon(R.drawable.ic_launcher); // sb.setGroupCheckable(0, true, true); sb.getItem(0).setCheckable(true); sb.getItem(0).setChecked(true); this.menu = menu; return super.onCreateOptionsMenu(menu); } |
5、 上下文子功能表
public class ContextMenuActivity extends Activity { ContextMenu menu = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) this.findViewById(R.id.textView); this.registerForContextMenu(tv); } public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){ menu.setHeaderTitle("操作功能表"); menu.setHeaderIcon(R.drawable.ic_launcher); getMenuInflater().inflate(R.menu.context_menu, menu); this.menu = menu; } public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.subitem1: Toast.makeText(this, "subitem1", Toast.LENGTH_SHORT).show(); break; case R.id.subitem2: Toast.makeText(this, "subitem2", Toast.LENGTH_SHORT).show(); break; case R.id.subitem3: Toast.makeText(this, "subitem3", Toast.LENGTH_SHORT).show(); break; } return true; } } |
6、 示範操作功能表的二級菜單和動態修改
android提供了三種菜單類型,分別為options menu,context menu,sub menu。options menu就是通過按home鍵來顯示,context menu需要在view上按上2s後顯示。這兩種menu都有可以加入子功能表,子功能表不能種不能嵌套子功能表。
options menu最多隻能在螢幕最下面顯示6個菜單選項,成為icon menu,icon menu不能有checkable選項。多餘6的會以more icon menu來調出,成為expanded menu。options menu通過activity的onCreateOptionsMenu來產生,這個函數只會在menu第一次產生時調用。任何想改變options menu的想法只能在onPrepareOptionsMenu來實現,這個函數會在menu顯示前調用。onOptionsItemSelected 處理選中的功能表項目。
context menu是跟某個具體的view綁定在一起,在activity種用registerForContextMenu來為某個view註冊context menu。context menu在顯示前都會調用onCreateContextMenu來產生menu。onContextItemSelected選中的功能表項目。
android還提供了對功能表項目進行分組的功能,可以把相似功能的功能表項目分成同一個組,這樣就可以通過調用setGroupCheckable,setGroupEnabled,setGroupVisible來設定菜單屬性,而無須單獨設定。