本篇文章給大家分享的是有關(guān)如何在Android中使用PopupMenu組件,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供靈山企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為靈山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
1.創(chuàng)建資源文件
在 res 目錄下新建 menu 文件夾,這個(gè)文件夾主要是來(lái)存放菜單資源文件的。我們新建 sample_menu.xml文件:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/next" android:icon="@mipmap/ic_launcher" android:title="下一首播放"/> <item android:id="@+id/add" android:icon="@mipmap/ic_launcher" android:title="添加到歌單"/> <item android:id="@+id/detail" android:icon="@mipmap/ic_launcher" android:title="歌曲詳情"/> <item android:id="@+id/del" android:icon="@mipmap/ic_launcher" android:title="刪除歌曲"/> </menu>
隨便寫幾個(gè)菜單選項(xiàng)。
2.在代碼中展示
private void showPopupMenu(View view) { // 這里的view代表popupMenu需要依附的view PopupMenu popupMenu = new PopupMenu(MainActivity.this, view); // 獲取布局文件 popupMenu.getMenuInflater().inflate(R.menu.sample_menu, popupMenu.getMenu()); popupMenu.show(); // 通過(guò)上面這幾行代碼,就可以把控件顯示出來(lái)了 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { // 控件每一個(gè)item的點(diǎn)擊事件 return true; } }); popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() { @Override public void onDismiss(PopupMenu menu) { // 控件消失時(shí)的事件 } }); }
有時(shí)候我們還需要根據(jù)不同的條件,顯示或隱藏指定的 item,比如在點(diǎn)擊第二個(gè)按鈕的時(shí)候隱藏掉“刪除歌曲”的選項(xiàng),只需要添加幾行代碼:
... popupMenu.show(); switch (view.getId()) { case R.id.btn_world: popupMenu.getMenu().findItem(R.id.del).setVisible(false); break; default: break; } ...
有時(shí)候我們還需要根據(jù)不同的條件,顯示或隱藏指定的 item,比如在點(diǎn)擊第二個(gè)按鈕的時(shí)候隱藏掉“刪除歌曲”的選項(xiàng),只需要添加幾行代碼:
... popupMenu.show(); switch (view.getId()) { case R.id.btn_world: popupMenu.getMenu().findItem(R.id.del).setVisible(false); break; default: break; } ...
來(lái)看一下效果:
PopupMenu 默認(rèn)是在指定控件的下方顯示的,但是當(dāng)檢測(cè)到空間不足時(shí),會(huì)自動(dòng)調(diào)整顯示的位置。而且自帶動(dòng)畫效果,是不是很方便呢?
3.在 PopupMenu 中顯示圖標(biāo)
以前用到帶圖標(biāo)的菜單時(shí),一般都是通過(guò)自定義 PopupWindow 來(lái)實(shí)現(xiàn)的,比較麻煩,其實(shí) PopupMenu 可以很簡(jiǎn)單的實(shí)現(xiàn)這個(gè)功能,不過(guò)需要用到反射。關(guān)于反射,我理解的不深,所以下面的代碼也是從網(wǎng)上粘貼過(guò)來(lái)的。細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),在 xml 資源文件中,我在每個(gè) item 標(biāo)簽里都寫了 icon 的屬性。沒錯(cuò),要顯示的正是在這里設(shè)置的圖片。當(dāng)然,如果你不需要顯示圖標(biāo)的話,icon 是沒有必要寫的。
try { Field field = popupMenu.getClass().getDeclaredField("mPopup"); field.setAccessible(true); MenuPopupHelper helper = (MenuPopupHelper) field.get(popupMenu); helper.setForceShowIcon(true); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); }
以上就是如何在Android中使用PopupMenu組件,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章名稱:如何在Android中使用PopupMenu組件
網(wǎng)頁(yè)鏈接:http://muchs.cn/article36/piccsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、定制網(wǎng)站、Google、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)