国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中PopupMenu組件的使用實例

2019-10-22 18:32:39
字體:
來源:轉載
供稿:網友

最近學習研究了一下android/193726.html">Android中PopupMenu組件的使用,發現很實用,所以留個筆記留作日后查詢

估計很多人遇到過這種場景:

要求彈出的PopupWindow里面是一個列表,我們使用時都是在里面套個ListView或RecyclerView ,現在我們不需要在做這樣繁瑣的工作了。

在官方android.support.v7.widget 包下提供的 PopupMenu 組件,已經被越來越多的項目所采用。我們先看一下幾個 app 的效果:

Android,PopupMenu,PopupMenu使用

Android,PopupMenu,PopupMenu使用

這是一個非常輕量化的上下文菜單組件,簡潔、使用方便。

1.創建資源文件

在 res 目錄下新建 menu 文件夾,這個文件夾主要是來存放菜單資源文件的。我們新建 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>

隨便寫幾個菜單選項。

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();  // 通過上面這幾行代碼,就可以把控件顯示出來了  popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {   @Override   public boolean onMenuItemClick(MenuItem item) {    // 控件每一個item的點擊事件    return true;   }  });  popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {   @Override   public void onDismiss(PopupMenu menu) {    // 控件消失時的事件   }  }); }

有時候我們還需要根據不同的條件,顯示或隱藏指定的 item,比如在點擊第二個按鈕的時候隱藏掉“刪除歌曲”的選項,只需要添加幾行代碼:

...popupMenu.show();switch (view.getId()) { case R.id.btn_world:  popupMenu.getMenu().findItem(R.id.del).setVisible(false);  break; default:  break;}...

有時候我們還需要根據不同的條件,顯示或隱藏指定的 item,比如在點擊第二個按鈕的時候隱藏掉“刪除歌曲”的選項,只需要添加幾行代碼:

...popupMenu.show();switch (view.getId()) { case R.id.btn_world:  popupMenu.getMenu().findItem(R.id.del).setVisible(false);  break; default:  break;}...

來看一下效果:

Android,PopupMenu,PopupMenu使用

Android,PopupMenu,PopupMenu使用

PopupMenu 默認是在指定控件的下方顯示的,但是當檢測到空間不足時,會自動調整顯示的位置。而且自帶動畫效果,是不是很方便呢?

3.在 PopupMenu 中顯示圖標

以前用到帶圖標的菜單時,一般都是通過自定義 PopupWindow 來實現的,比較麻煩,其實 PopupMenu 可以很簡單的實現這個功能,不過需要用到反射。關于反射,我理解的不深,所以下面的代碼也是從網上粘貼過來的。細心的同學可能會發現,在 xml 資源文件中,我在每個 item 標簽里都寫了 icon 的屬性。沒錯,要顯示的正是在這里設置的圖片。當然,如果你不需要顯示圖標的話,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,PopupMenu使用

對于 PopupMenu 的使用暫時想到了這么多,以后如果遇到更多的使用技巧,會再來補充的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白山市| 安达市| 南丰县| 岢岚县| 鞍山市| 法库县| 赫章县| 都安| 临潭县| 巴彦淖尔市| 福海县| 灵寿县| 太康县| 丹阳市| 宁夏| 班戈县| 新蔡县| 吴川市| 得荣县| 绥江县| 晋州市| 灵台县| 陇南市| 会宁县| 秀山| 金塔县| 孟连| 东港市| 福建省| 桃园县| 象山县| 资中县| 时尚| 安多县| 宁陕县| 天津市| 阿克陶县| 敖汉旗| 庆阳市| 会东县| 龙南县|