Android中menu的使用集錦
最近在研究關於MaterialDesign系類的內容,在研究Toolbar和NavigationView的時候,都使用到menu的內容。感覺自己不是很理解,可以說就是不知道,只會簡單的寫一個menu其他的什麼都不會了。所以總結一下,希望對大家有幫助!!!
本文會講解的知識點
menu的使用
menu的屬性說明
menu的使用注意事項
1. menu的使用
首先說明一下menu的存放位置,在創建項目的時候,是沒有menu文件夾的,所以這裡你要自己創建一個menu文件夾,然後新建一個menu文件。具體位置看下面這張圖就可以了(因為這張圖設置了相應的樣式,所以彈出來的popup有一個背景色)!
menu文件的位置
下面我們來介紹關於menu文件怎麼寫,以及各個屬性的含義
這是一個比較複雜的menu文件了,對於一般的續修不會有下面更多的那個item。還是先看一下效果吧!
GIF
多層的menu文件的顯示
看了效果之後,我們就很好理解其中的屬性了,這裡先解釋一下相應的menu標籤的屬性值:
2. menu的屬性說明
2.1 item的屬性說明
這裡面的屬性很多,但是個人覺得有很多用不上,列出來的都是一些常用的屬性。
android:id 控制項的ID
android:icon 空間的圖標(這裡如果顯示在Toolbar上面,會顯示圖片,在溢出菜單裡面的話會只顯示文字)
android:title 顯示的標題(也就是條目的內容)
app:actionViewClass 引入一個View(這個是在實現搜索的時候用到的)
app:showAsAction 顯示方式
ifRoom 如果有空間的話,會顯示在ToolBar上,當空間不足的時候會顯示在列表中
always 一直顯示在ToolBar上(如果沒有空間的話,還是會顯示在列表中,按先後順序排列的)
collapseActionView (一般要配合ifRoom一起使用)聲明這個操作視窗應該被摺疊到一個按鈕中,當用戶選擇這個按鈕時,這個操作視窗展開。這個屬性主要是實現自意義溢出菜單的。可以在它的裡面設置一些item從而實現溢出菜單(這個自定義的溢出菜單和默認的溢出菜單唯一的區別就是它可以顯示圖標)
never 不會顯示在Toolbar上面,會顯示在列列表中
withText 表示顯示的時候如果空間足夠,會顯示menu的title。但是我試了試沒看到,還請知道的大神告知一聲!
android:titleCondensed 當你設置的內容過長的時候,可以使用這個屬性進行簡短的說明
android:onClick 和View的onClick方法類似,設置一個點擊事件
android:checkable 菜單是否可以複選,如果可以複選的話設置成true
android:checked 菜單是否可以被選中,如果可以被選中的話設置成true
android:visible 菜單是否顯示
android:enabled 菜單項目是否可用,如果可用為true。主要是用在自定義溢出菜單的時候,是否可以進行相應的相應。
android:orderInCategory 菜單的優先順序,整數類型,數字越小越靠前
2.2 group的屬性說明
主要是一個組的屬性,和RadioGroup的樣式類似,主要是實現複選的!裡面的一些屬性和上面是類似的,這裡主要說明一個屬性
android:checkableBeharior 設置複選行為的類型
none 沒有可複選性
all 組內的所有的項目都可以被複選(使用複選框)
single 僅有一個項目能夠被複選(使用單選按鈕)
下面是關於group標籤的使用
這裡就是通過自定義溢出菜單展示的group,具體效果看下面這張圖
group的展示
設置menu二級菜單的時候(無論是自定義還是系統的),前一級標籤的文字顏色是黑色的,這個目前還沒有找到好的解決方案,希望知道的給留個言!!!謝謝
3. menu的使用注意事項
這裡我主要像說明一下我在開發中遇到的關於menu的一些問題
Fragment中怎麼顯示menu?
Activity和Fragment同時使用menu會怎樣顯示?
Activity和Fragment同時處理點擊事件怎麼相應?
menu的怎麼動態改變?
多個Activity同時使用一個menu怎麼簡化操作?
這些問題,在平時的開發中,相信很多人都不會注意到!所以這裡有必要和大家分享一下相關的內容。
3.1 Fragment中怎麼顯示menu?
Fragment中顯示menu文件和Activity中是類似的,但是必須在掛在View之前添加這句代碼(基本上都是載入onCreat()上面),否則顯示不出來的。。。
上面這段代碼就是Fragment中顯示menu的方法!
3.2 Activity和Fragment同時使用menu會怎樣顯示?
是不是覺得很奇怪的問題,你的答案是什麼?是不是變得模稜兩可了,其實有的面試官很關注這些細節。答案就是疊加顯示,怎麼個疊加顯示呢?一個簡單的說明,你在Activity中添加了一個設置的menu條目,如果你在Fragment中也寫了一個,那麼menu上會新增一個Fragment的menu文件。
就像這樣
3.3 Activity和Fragment同時處理點擊事件怎麼相應?
有的人可能會問了,那點擊事件怎麼處理呢?其實處理起來很簡單,就是在處理相應的點擊事件。但是有一個點需要注意,就是Activity的方法的返回值!默認的情況下應該返回這個,防止處理了事件之後,Fragment收不到相應的點擊事件!
Activity的方法:
Fragment的方法:
這樣所有的點擊事件就能得到相應的響應了。
3.4 menu的怎麼動態改變?
有的人可能說動態的刷新了menu但是卻沒有成功,其實是沒有調用通知menu刷新的方法造成的。下面我們來看看menu刷新的代碼:
這裡說一下相應的邏輯,當調用的時候會重走這個方法,這裡我用了一個標識去標記是否刷新,為什麼會有這個標識呢?因為準備menu的時候調用,所以剛一進來的時候就會被調用一次,點擊後還會調用一次。
3.5 多個Activity同時使用一個menu怎麼簡化操作?
這個相當於繼承的關係。其實這個問題也是相應的疊加問題,只要你記住menu是可以疊加的就可以。只要在你的方法中載入父類的menu就可以了,像下面面這樣!
基本上關於menu的使用就這些了,總結的可能還會有不到位的地方,如果你還有關於menu的使用問題,可以給我留言。
※真的,愛情這件事我一直放在心上呢
※雅韻詩匯第4期——《池上》
TAG:全球大搜羅 |