1. 程式人生 > >android:PopupWindow巢狀ListView (附加製作9.png圖片)

android:PopupWindow巢狀ListView (附加製作9.png圖片)

首先看下效果圖,就是普通的PopupWindow彈出分類選項點選效果;

popupWindow的佈局有兩種方式可以實現:

第一種:使用線性佈局直接將將圖片,文字寫好;

第二種:為長期考慮,使用PopupWindow巢狀ListView;(可擴充套件性強)

我們Demo中使用的是第二種;

可能大家會感覺非常簡單,但是在專案中使用的時候還真的碰到一些坑;

主頁面佈局就不在展示了,我們先看下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>
接下來看下主頁面彈出PopupWindow的邏輯程式碼:
 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...


點選讓你選擇圖片儲存位置,選擇好位置會生成9.png圖片


左上標註指的是拉伸的區域;

上下標註指的是內容填充區域;