詳解Android中的Menu菜單鍵
Android中的設(shè)置按鈕:長(zhǎng)按或點(diǎn)擊菜單鍵
1.長(zhǎng)按選項(xiàng):
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MenuActivity" > <TextView android:id="@+id/menutext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="第一種方法創(chuàng)建菜單" android:textSize="sp" /> <TextView android:id="@+id/menutext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="第二種方法創(chuàng)建菜單" android:textSize="sp" /> <ListView android:id="@+id/menulist" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="dp" > </ListView> </LinearLayout>
實(shí)現(xiàn)過程:
private ListView list; private TextView lv; String[] str = { "TextView", "EditView", "Toast(消息框)" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); list = (ListView) findViewById(R.id.menulist); ArrayAdapter<String> arr = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_, str); list.setAdapter(arr); list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.clear(); menu.clearHeader(); menu.setHeaderIcon((R.drawable.ic_launcher)); menu.setHeaderTitle("我是ListView"); menu.add(, , , "刪除"); menu.add(, , , "修改"); } }); // 第一種方法 TextView tv = (TextView) findViewById(R.id.menutext); this.registerForContextMenu(tv); // 第二種方法 lv = (TextView) findViewById(R.id.menutext); lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle("長(zhǎng)度-ContextMenu"); menu.add(, , , "復(fù)制"); SubMenu sb = menu.addSubMenu("查找"); sb.add(, , , "按id查找"); sb.add(, , , "按名稱查找"); } }); }
2.長(zhǎng)按菜單項(xiàng):
private ListView list; private TextView lv; String[] str = { "TextView", "EditView", "Toast(消息框)" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); list = (ListView) findViewById(R.id.menulist); ArrayAdapter<String> arr = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_, str); list.setAdapter(arr); list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.clear(); menu.clearHeader(); menu.setHeaderIcon((R.drawable.ic_launcher)); menu.setHeaderTitle("我是ListView"); menu.add(, , , "刪除"); menu.add(, , , "修改"); } }); // 第一種方法 TextView tv = (TextView) findViewById(R.id.menutext); this.registerForContextMenu(tv); // 第二種方法 lv = (TextView) findViewById(R.id.menutext); lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle("長(zhǎng)度-ContextMenu"); menu.add(, , , "復(fù)制"); SubMenu sb = menu.addSubMenu("查找"); sb.add(, , , "按id查找"); sb.add(, , , "按名稱查找"); } }); }
下面給大家補(bǔ)充點(diǎn)Menu的基本用法
使用xml定義Menu
菜單資源文件必須放在res/menu目錄中。菜單資源文件必須使用<menu>標(biāo)簽作為根節(jié)點(diǎn)。除了<menu>標(biāo)簽外,還有另外兩個(gè)標(biāo)簽用于設(shè)置菜單項(xiàng)和分組,這兩個(gè)標(biāo)簽是<item>和<group>。
<menu>標(biāo)簽沒有任何屬性,但可以嵌套在<item>標(biāo)簽中,表示子菜單的形式。不過<item>標(biāo)簽中不能再嵌入<item>標(biāo)簽。
1.<item>標(biāo)簽的屬性含義如下:
Id:表示菜單項(xiàng)的資源ID
menuCategory:同種菜單項(xiàng)的種類。該屬性可取4個(gè)值:container、system、secondary和alternative。通過menuCategroy屬性可以控制菜單項(xiàng)的位置。例如將屬性設(shè)為system,表示該菜單項(xiàng)是系統(tǒng)菜單,應(yīng)放在其他種類菜單項(xiàng)的后面。
orderInCategor:同種類菜單的排列順序。該屬性需要設(shè)置一個(gè)整數(shù)值。例如menuCategory屬性值都為system的3個(gè)菜單項(xiàng)(item1、item2和item3)。將這3個(gè)菜單項(xiàng)的orderInCategory屬性值設(shè)為3、2、1,那么item3會(huì)顯示在最前面,而item1會(huì)顯示在最后面。
title:菜單項(xiàng)標(biāo)題(菜單項(xiàng)顯示的文本)
titleCondensed:菜單項(xiàng)的短標(biāo)題。當(dāng)菜單項(xiàng)標(biāo)題太長(zhǎng)時(shí)會(huì)顯示該屬性值
icon:菜單項(xiàng)圖標(biāo)資源ID
alphabeticShortcut:菜單項(xiàng)的字母快捷鍵
numericShortcut:菜單項(xiàng)的數(shù)字快捷鍵
checkable:表示菜單項(xiàng)是否帶復(fù)選框。該屬性可設(shè)計(jì)為true或false
checked:如果菜單項(xiàng)帶復(fù)選框(checkable屬性為true),該屬性表示復(fù)選框默認(rèn)狀態(tài)是否被選中??稍O(shè)置的值為true或false
visible:菜單項(xiàng)默認(rèn)狀態(tài)是否可視
enable:菜單項(xiàng)默認(rèn)狀態(tài)是否被激活
2.<group>標(biāo)簽的屬性含義如下:
id:表示菜單組的ID
menuCategory:與<item>標(biāo)簽的同名屬性含義相同。只是作用域?yàn)椴藛谓M
orderInCategory:與<item>標(biāo)簽的同名屬性含義相同。只是作用域?yàn)椴藛谓M
checkableBehavior:設(shè)置該組所有菜單項(xiàng)上顯示的選擇組件(CheckBox或Radio Button)。如果將該屬性值設(shè)為all,顯示
CheckBox組件;如果設(shè)為single,顯示Radio Button組件;如果設(shè)為none,顯示正常的菜單項(xiàng)(不顯示任何選擇組件)。要注意的是,Android SDK官方文檔在解釋該屬性時(shí)有一個(gè)筆誤,原文是:
Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).
相反了,正確應(yīng)該是
all(non-exclusive/checkboxes),single(exclusive/radiobuttons).
visible:表示當(dāng)前組中所有菜單項(xiàng)是否顯示。該屬性可設(shè)置的值是true或false
enable:表示當(dāng)前組中所有菜單項(xiàng)是否被激活。該屬性可設(shè)置的值是true或false
相關(guān)文章
Android開發(fā)之AlarmManager的用法詳解
這篇文章主要介紹了Android開發(fā)之AlarmManager的用法,是Android應(yīng)用開發(fā)中非常實(shí)用的技能,需要的朋友可以參考下2014-07-07Android Scroll滑動(dòng)效果實(shí)例
這篇文章主要為大家分享了Android Scroll滑動(dòng)效果實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04Flutter 構(gòu)建一個(gè)常用的頁(yè)面框架
大多數(shù) App 中都會(huì)有底部導(dǎo)航欄,通過底部導(dǎo)航欄切換實(shí)現(xiàn)不同頁(yè)面之間的切換。在Flutter 中提供了 BottomNavigationBar組件實(shí)現(xiàn)底部導(dǎo)航。本篇介紹通過 BottomNavigationBar和 IndexedStack構(gòu)建最為常見的 App 頁(yè)面框架。2021-05-05Android RecyclerView的卡頓問題的解決方法
本篇文章主要介紹了Android RecyclerView的卡頓問題的解決方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04Android利用碎片fragment實(shí)現(xiàn)底部標(biāo)題欄(Github模板開源)
Fragment可以作為Activity的組成部分,一個(gè)Activity可以有多個(gè)Fragment,這篇文章主要介紹了Android利用碎片fragment實(shí)現(xiàn)底部標(biāo)題欄(Github模板開源),需要的朋友可以參考下2019-12-12Android原生TabLayout使用的超全解析(看這篇就夠了)
現(xiàn)在很多app都有頂部可左右切換的導(dǎo)航欄,并且還帶動(dòng)畫效果,要實(shí)現(xiàn)這種導(dǎo)航欄,可以使用Android原生的Tablayout也可以借助第三方框架實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于Android原生TabLayout使用的相關(guān)資料,需要的朋友可以參考下2022-09-09Android編程之簡(jiǎn)單啟動(dòng)畫面實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之簡(jiǎn)單啟動(dòng)畫面實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了開機(jī)啟動(dòng)畫面的制作步驟及布局、Activity跳轉(zhuǎn)、權(quán)限控制等的相關(guān)操作技巧,需要的朋友可以參考下2016-11-11Android 中讀取SD卡文件時(shí)拋出NullPointerException錯(cuò)誤解決辦法
這篇文章主要介紹了Android 中讀取SD卡文件時(shí)拋出NullPointerException錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05Android中Market的Loading效果實(shí)現(xiàn)方法
這篇文章主要介紹了Android中Market的Loading效果實(shí)現(xiàn)方法,較為詳細(xì)的分析了Android中l(wèi)oading效果的相關(guān)布局及功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10