最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中PopupMenu組件的使用實(shí)例

 更新時(shí)間:2017年07月10日 14:49:26   作者:小朱v  
本篇文章主要介紹了Android中PopupMenu組件的使用實(shí)例,詳細(xì)的介紹了PopupMenu組件的使用,具體一定的參考價(jià)值,有興趣的可以了解一下

最近學(xué)習(xí)研究了一下Android中PopupMenu組件的使用,發(fā)現(xiàn)很實(shí)用,所以留個(gè)筆記留作日后查詢(xún)

估計(jì)很多人遇到過(guò)這種場(chǎng)景:

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

在官方android.support.v7.widget 包下提供的 PopupMenu 組件,已經(jīng)被越來(lái)越多的項(xiàng)目所采用。我們先看一下幾個(gè) app 的效果:


這是一個(gè)非常輕量化的上下文菜單組件,簡(jiǎ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>

隨便寫(xiě)幾個(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)畫(huà)效果,是不是很方便呢?

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)簽里都寫(xiě)了 icon 的屬性。沒(méi)錯(cuò),要顯示的正是在這里設(shè)置的圖片。當(dāng)然,如果你不需要顯示圖標(biāo)的話(huà),icon 是沒(méi)有必要寫(xiě)的。

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();
  }

最終效果:

對(duì)于 PopupMenu 的使用暫時(shí)想到了這么多,以后如果遇到更多的使用技巧,會(huì)再來(lái)補(bǔ)充的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • GridView基于pulltorefresh實(shí)現(xiàn)下拉刷新 上拉加載更多功能(推薦)

    GridView基于pulltorefresh實(shí)現(xiàn)下拉刷新 上拉加載更多功能(推薦)

    原理和listview一樣 ,都是重寫(xiě)Android原生控件。下面小編通過(guò)實(shí)例代碼給大家分享GridView基于pulltorefresh實(shí)現(xiàn)下拉刷新 上拉加載更多功能,非常不錯(cuò),一起看看吧
    2016-11-11
  • Android自定義彈窗提示效果

    Android自定義彈窗提示效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義彈窗提示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Flutter?list?數(shù)組排序示例解析

    Flutter?list?數(shù)組排序示例解析

    這篇文章主要為大家介紹了Flutter?list?數(shù)組排序?qū)崿F(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Android獲取手機(jī)號(hào)碼和運(yùn)營(yíng)商信息的方法

    Android獲取手機(jī)號(hào)碼和運(yùn)營(yíng)商信息的方法

    這篇文章主要介紹了Android獲取手機(jī)號(hào)碼和運(yùn)營(yíng)商信息的方法,以實(shí)例形式完整講述了獲取手機(jī)號(hào)碼和運(yùn)營(yíng)商信息的技巧,代碼中包含完整的注釋說(shuō)明,需要的朋友可以參考下
    2015-01-01
  • Android自定義ViewGroup之FlowLayout(三)

    Android自定義ViewGroup之FlowLayout(三)

    這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup之FlowLayout,常用于關(guān)鍵字標(biāo)簽,搜索熱詞列表等功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android中常用的XML生成方法實(shí)例分析

    Android中常用的XML生成方法實(shí)例分析

    這篇文章主要介紹了Android中常用的XML生成方法,以實(shí)例形式較為詳細(xì)的分析了Android生成XML的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android Studio 報(bào)Integer types not allowed錯(cuò)誤

    Android Studio 報(bào)Integer types not allowed錯(cuò)誤

    本文給大家分享的是在使用Android Studio的過(guò)程中遇到的報(bào)Integer types not allowed錯(cuò)誤的分析及解決方法,非常實(shí)用,有需要的小伙伴可以參考下
    2017-10-10
  • 自定義滑動(dòng)按鈕為例圖文剖析Android自定義View繪制

    自定義滑動(dòng)按鈕為例圖文剖析Android自定義View繪制

    這篇文章主要介紹了自定義滑動(dòng)按鈕的例子,圖文剖析Android自定義View繪制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 詳解Android6.0運(yùn)行時(shí)權(quán)限管理

    詳解Android6.0運(yùn)行時(shí)權(quán)限管理

    自從Android6.0發(fā)布以來(lái),在權(quán)限上做出了很大的變動(dòng),不再是之前的只要在manifest設(shè)置就可以任意獲取權(quán)限,而是更加的注重用戶(hù)的隱私和體驗(yàn)。本文詳細(xì)介紹了Android6.0運(yùn)行時(shí)權(quán)限管理。需要的朋友一起來(lái)看下吧
    2016-12-12
  • Android 刪除指定包名的App實(shí)例代碼

    Android 刪除指定包名的App實(shí)例代碼

    這篇文章主要介紹了Android 刪除指定包名的App實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

遂宁市| 吉安市| 滨海县| 灵武市| 高青县| 上虞市| 乌恰县| 牟定县| 玉龙| 托里县| 民勤县| 大同县| 沾益县| 万载县| 根河市| 紫金县| 宝山区| 清新县| 乌拉特后旗| 师宗县| 海安县| 卢氏县| 大竹县| 乌兰浩特市| 永州市| 湖州市| 柳江县| 辽源市| 永平县| 靖远县| 金山区| 安庆市| 泰安市| 德昌县| 芜湖市| 望江县| 宝山区| 石城县| 合肥市| 渭南市| 凉城县|