android技术博客Android开发Android开发经验谈

FlycoDialog 简单实用的自定义Android弹窗对话框

2018-01-24  本文已影响159人  五万年前走丢了

效果图镇楼


PopupWindow

在很久很久以前五万曾经带给大家过一篇
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();//展示弹窗

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

上一篇下一篇

猜你喜欢

热点阅读