FlycoDialog 簡單實用的自定義Android彈窗對話框之PopupWindow篇

效果圖鎮(zhèn)樓


PopupWindow

在很久很久以前五萬曾經(jīng)帶給大家過一篇
FlycoDialog 簡單實用的自定義Android彈窗對話框之Dialog篇
現(xiàn)在為大家續(xù)寫一下它的姊妹篇,Dialog的小兄弟PopupWindow.
同樣,是基于非常棒的彈窗框架FlycoDialog實現(xiàn)的。

首先我們當然還是要添加依賴

compile 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'

接下來我們還是先寫好一個彈窗的布局,我們這里就以排序的彈窗布局為例。(上圖效果中的排序)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:paddingLeft="15dp"
    android:paddingRight="15dp">

    <TextView
        android:id="@+id/pop_item_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="利率從高到低"
        android:textColor="#666666"
        android:textSize="15sp"/>
    <TextView
        android:id="@+id/pop_item_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="利率從低到高"
        android:textColor="#666666"
        android:textSize="15sp"/>
   ...
</LinearLayout>

這里我把一點用都沒有的分割線去掉了,你們要是看著不習慣就自己加上。

接下來我們寫關于彈窗的邏輯代碼,建議像我一樣寫成內部類,有利于數(shù)據(jù)傳輸和代碼的邏輯控制。如果不愿意寫成內部類在class前加public就好,在彈框中使用接口回調控制主頁相關邏輯。

 class SortPopup extends BasePopup<SortPopup> implements View.OnClickListener {
        private TextView item1;
        private TextView item2;
       ...

        public SortPopup(Context context) {
            super(context);
        }

        @Override
        public View onCreatePopupView() {
            View inflate = View.inflate(mContext, R.layout.popup_sort, null);
            //在這里我們對彈窗中的控件進行初始化
            item1 = (TextView) inflate.findViewById(R.id.pop_item_1);
            item2 = (TextView) inflate.findViewById(R.id.pop_item_2);
            ...
            return inflate;
        }

        @Override
        public void setUiBeforShow() {
        //為他們設置監(jiān)聽
            item1.setOnClickListener(this);
            item2.setOnClickListener(this);
            ...
        }
        
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.pop_item_1:
             //觸發(fā)第一個控件的監(jiān)聽要處理的內容(效果圖中利率從高到低的那個按鈕)。
                    dismiss();//關閉彈框
                    break;
                case R.id.pop_item_2:
             //觸發(fā)第二個控件的監(jiān)聽要處理的內容。      
                    dismiss();
                    break;
                ...
                default:
                    break;
            }
        }
    }

然后我們來實現(xiàn)啟動彈框的代碼

sortPopup.alignCenter(true)
              .anchorView(sort_tv)//彈框從哪個控件里彈出,(這里的sort_tv是效果圖中顯示排序的TextView)
              .gravity(Gravity.BOTTOM)//彈框從控件的哪里彈出。這里設置的是底部
              .showAnim(new SlideTopEnter())//選擇彈出動畫
              .dismissAnim(new SlideTopExit())//選擇消失動畫
              .offset(0, 0)//設置彈窗的偏移量,這個你們不用管。
              .dimEnabled(false)//彈窗是否具有強制性(點其他位置會不會消失,false是無強制性,會消失)
              .show();//展示彈窗

如果還有什么不明白的地方可在博客下留言。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容