android:PopupWindow巢狀ListView (附加製作9.png圖片)
阿新 • • 發佈:2019-01-04
首先看下效果圖,就是普通的PopupWindow彈出分類選項點選效果;
popupWindow的佈局有兩種方式可以實現:
第一種:使用線性佈局直接將將圖片,文字寫好;
第二種:為長期考慮,使用PopupWindow巢狀ListView;(可擴充套件性強)
我們Demo中使用的是第二種;
可能大家會感覺非常簡單,但是在專案中使用的時候還真的碰到一些坑;
主頁面佈局就不在展示了,我們先看下PopupWindow的佈局檔案(第一個坑);
接下來看下主頁面彈出PopupWindow的邏輯程式碼:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="145dp" android:layout_height="match_parent"> <!--這裡的layout_width必須寫成固定值,不然和match_parent效果一樣(X方向填充滿螢幕)--> <ListView android:id="@+id/listview" android:layout_width="135dp" android:layout_height="match_parent" android:layout_marginRight="10dp" android:background="@mipmap/aa"/> </LinearLayout>
View popView=View.inflate(this,R.layout.pop,null); /** * 第一個引數:View contenView(佈局) * 第二個引數:int width(寬度) * 第三個引數:int height(高度) * 寬高參數:-2 和 ViewGroup.LayoutParams.WRAP_CONTENT 一樣 * -1 和 ViewGroup.LayoutParams.MATCH_PARENT 一樣 * * 三個引數缺少任意一個都不可能彈出來PopWindow; * */ popupWindow = new PopupWindow(popView, -2, -2); //popupWindow是否響應touch事件 popupWindow.setTouchable(true); //popupWindow是否具有獲取焦點的能力 popupWindow.setFocusable(true); //這個方法是重中之重,不僅僅是設定背景,不設定背景上面兩行程式碼無效 popupWindow.setBackgroundDrawable(null); popListView= (ListView) popView.findViewById(R.id.listview); //這裡有個小坑,程式碼設定分割線,必須先設定顏色,再設定高度,不然不生效 popListView.setDivider(new ColorDrawable(Color.WHITE)); popListView.setDividerHeight(1); PopListViewAdapter adapter = new PopListViewAdapter(context); popListView.setAdapter(adapter); /** * 第一個引數:顯示在iv佈局下面 * 第二個引數:xoff表示x軸的偏移,正值表示向左,負值表示向右; * 第三個引數:yoff表示相對y軸的偏移,正值是向下,負值是向上; */ popupWindow.showAsDropDown(iv,0,-40);
這裡面使用了一張9.png圖片,以前是在eclipse中製作的,其實androdiStudio也可以製作,而且非常的簡單;
直接右建你要製作的原圖,最下面有一個Create 9-Patch file...
左上標註指的是拉伸的區域;
上下標註指的是內容填充區域;