溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在Android中使用PopupMenu組件

發(fā)布時間:2021-03-30 16:43:57 來源:億速云 閱讀:242 作者:Leah 欄目:移動開發(fā)

本篇文章給大家分享的是有關(guān)如何在Android中使用PopupMenu組件,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.創(chuàng)建資源文件

在 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) {
    // 控件消失時的事件
   }
  });

 }

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

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

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

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

來看一下效果:

如何在Android中使用PopupMenu組件

如何在Android中使用PopupMenu組件

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

3.在 PopupMenu 中顯示圖標

以前用到帶圖標的菜單時,一般都是通過自定義 PopupWindow 來實現(xiàn)的,比較麻煩,其實 PopupMenu 可以很簡單的實現(xiàn)這個功能,不過需要用到反射。關(guān)于反射,我理解的不深,所以下面的代碼也是從網(wǎng)上粘貼過來的。細心的同學(xué)可能會發(fā)現(xiàn),在 xml 資源文件中,我在每個 item 標簽里都寫了 icon 的屬性。沒錯,要顯示的正是在這里設(shè)置的圖片。當然,如果你不需要顯示圖標的話,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組件,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI