效果图镇楼
在很久很久以前五万曾经带给大家过一篇
FlycoDialog 简单实用的自定义Android弹窗对话框之Dialog篇
现在为大家续写一下它的姊妹篇,Dialog的小兄弟PopupWindow.
同样,是基于非常棒的弹窗框架FlycoDialog实现的。
首先我们当然还是要添加依赖
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>
这里我把一点用都没有的分割线去掉了,你们要是看着不习惯就自己加上。
接下来我们写关于弹窗的逻辑代码,建议像我一样写成内部类,有利于数据传输和代码的逻辑控制。如果不愿意写成内部类在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() {
//为他们设置监听
item1.setOnClickListener(this);
item2.setOnClickListener(this);
...
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pop_item_1:
//触发第一个控件的监听要处理的内容(效果图中利率从高到低的那个按钮)。
dismiss();//关闭弹框
break;
case R.id.pop_item_2:
//触发第二个控件的监听要处理的内容。
dismiss();
break;
...
default:
break;
}
}
}
然后我们来实现启动弹框的代码
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();//展示弹窗
如果还有什么不明白的地方可在博客下留言。