在日常開發(fā)中,長(zhǎng)按某個(gè)view出現(xiàn)個(gè)菜單是很常見的需求,Google 也給我們提供了一些組件來(lái)實(shí)現(xiàn),比如PopupMenu。但是在實(shí)際使用中還是發(fā)現(xiàn)他無(wú)法滿足我們的所有需求。
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),成都網(wǎng)站設(shè)計(jì),一元廣告,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。比如:產(chǎn)品要求長(zhǎng)按菜單出現(xiàn)在手指按下的位置,額 這就頭疼了,PopupMenu只能展示在view的底部或者頭部。還有個(gè)問(wèn)題如果你的view過(guò)長(zhǎng)超過(guò)一屏,那么 PopupMenu 就無(wú)法顯示在屏幕里了。
所以沒(méi)辦法,只能硬著頭皮自己擼一個(gè)menu了。 在日常使用中發(fā)現(xiàn)微信的 彈窗菜單 很符合要求,所以就模仿微信來(lái)擼一個(gè)了。
實(shí)現(xiàn)思路
•繼承 PopupWindow 來(lái)實(shí)現(xiàn)長(zhǎng)按彈窗
•獲取當(dāng)前按下 位置,傳給 view 來(lái)顯示
具體實(shí)現(xiàn)
•第一個(gè)很好實(shí)現(xiàn),我用的是recyclerView 來(lái)實(shí)現(xiàn)布局的,而且傳入的資源是 menu。而且另一個(gè)好處就是控制某些 item的可見(因?yàn)槲易约喉?xiàng)目中有這樣需求,所以考慮進(jìn)去了)
private Menu mMenu; @NonNull @SuppressLint("RestrictedApi") public Menu getMenu() { if (mMenu == null) { mMenu = new MenuBuilder(mContext); } return mMenu; } @NonNull public MenuInflater getMenuInflater() { return new MenuInflater(mContext); } public void inflate(@MenuRes int menuRes) { getMenuInflater().inflate(menuRes, getMenu()); }