效果圖鎮(zhèn)樓
在很久很久以前五萬曾經(jīng)帶給大家過一篇
FlycoDialog 簡(jiǎn)單實(shí)用的自定義Android彈窗對(duì)話框之Dialog篇
現(xiàn)在為大家續(xù)寫一下它的姊妹篇作谭,Dialog的小兄弟PopupWindow.
同樣娱颊,是基于非常棒的彈窗框架FlycoDialog實(shí)現(xiàn)的俯渤。
首先我們當(dāng)然還是要添加依賴
compile 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'
接下來我們還是先寫好一個(gè)彈窗的布局康谆,我們這里就以排序的彈窗布局為例。(上圖效果中的排序)
<?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>
這里我把一點(diǎn)用都沒有的分割線去掉了端盆,你們要是看著不習(xí)慣就自己加上闪幽。
接下來我們寫關(guān)于彈窗的邏輯代碼,建議像我一樣寫成內(nèi)部類谓松,有利于數(shù)據(jù)傳輸和代碼的邏輯控制星压。如果不愿意寫成內(nèi)部類在class前加public就好,在彈框中使用接口回調(diào)控制主頁相關(guān)邏輯毒返。
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);
//在這里我們對(duì)彈窗中的控件進(jìn)行初始化
item1 = (TextView) inflate.findViewById(R.id.pop_item_1);
item2 = (TextView) inflate.findViewById(R.id.pop_item_2);
...
return inflate;
}
@Override
public void setUiBeforShow() {
//為他們?cè)O(shè)置監(jiān)聽
item1.setOnClickListener(this);
item2.setOnClickListener(this);
...
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pop_item_1:
//觸發(fā)第一個(gè)控件的監(jiān)聽要處理的內(nèi)容(效果圖中利率從高到低的那個(gè)按鈕)租幕。
dismiss();//關(guān)閉彈框
break;
case R.id.pop_item_2:
//觸發(fā)第二個(gè)控件的監(jiān)聽要處理的內(nèi)容。
dismiss();
break;
...
default:
break;
}
}
}
然后我們來實(shí)現(xiàn)啟動(dòng)彈框的代碼
sortPopup.alignCenter(true)
.anchorView(sort_tv)//彈框從哪個(gè)控件里彈出拧簸,(這里的sort_tv是效果圖中顯示排序的TextView)
.gravity(Gravity.BOTTOM)//彈框從控件的哪里彈出劲绪。這里設(shè)置的是底部
.showAnim(new SlideTopEnter())//選擇彈出動(dòng)畫
.dismissAnim(new SlideTopExit())//選擇消失動(dòng)畫
.offset(0, 0)//設(shè)置彈窗的偏移量,這個(gè)你們不用管盆赤。
.dimEnabled(false)//彈窗是否具有強(qiáng)制性(點(diǎn)其他位置會(huì)不會(huì)消失贾富,false是無強(qiáng)制性,會(huì)消失)
.show();//展示彈窗
如果還有什么不明白的地方可在博客下留言牺六。