美文网首页android技术博客Android开发Android开发经验谈
FlycoDialog 简单实用的自定义Android弹窗对话框

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

作者: 五万年前走丢了 | 来源:发表于2018-01-24 17:06 被阅读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();//展示弹窗
    

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

    相关文章

      网友评论

        本文标题:FlycoDialog 简单实用的自定义Android弹窗对话框

        本文链接:https://www.haomeiwen.com/subject/zvwuaxtx.html