美文网首页
通用PopupWindow

通用PopupWindow

作者: MissmoBaby | 来源:发表于2017-07-13 17:30 被阅读0次

组件介绍

这个组件简便了android开中使用PopupWindow,不需要写更多繁琐的代码,即可实现具有自定义动画、显示位置的PopupWindow。

动态图

pop.gif

使用场景

android中所有的弹窗,如输入密码框、列表选项等都可以使用,目前有两种类型的PopupWindow样式支持。

一种是气泡的:

1.png

一种是普通样式的:

2.png

如何使用

第一种:气泡样式

View inflate = View.inflate(mContext, R.layout.dialog_anim_popup_bubble_text, null);
        TextView tv = (TextView) inflate.findViewById(R.id.tv_bubble);
        BubblePopup bubblePopup = new BubblePopup(mContext, inflate);
        tv.setText("最美的不是下雨天,是曾与你躲过雨的屋檐~");
        bubblePopup.anchorView(mTvTopLeft)
                .gravity(Gravity.BOTTOM)
                .show();
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                T.showShort(mContext, "tv_bubble");
            }
        });

R.layout.dialog_anim_popup_bubble_text布局文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:id="@+id/tv_bubble"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="18dp"
    android:text="最美的不是下雨天~"
    android:textColor="#ffffff"
    android:textSize="15sp"/>

第二步:普通样式

private SimpleCustomPop mQuickCustomPopup;
mQuickCustomPopup = new SimpleCustomPop(mContext);
mQuickCustomPopup
                .anchorView(mTvTopLeft)
                .gravity(Gravity.BOTTOM)
                .offset(0, 0)
                .showAnim(new BounceTopEnter())
                .dismissAnim(new SlideTopExit())
                .dimEnabled(false)
                .show();
class SimpleCustomPop extends BasePopup<SimpleCustomPop> {
        @Bind(R.id.tv_item_1)
        TextView mTvItem1;
        @Bind(R.id.tv_item_2)
        TextView mTvItem2;
        @Bind(R.id.tv_item_3)
        TextView mTvItem3;
        @Bind(R.id.tv_item_4)
        TextView mTvItem4;
        public SimpleCustomPop(Context context) {
            super(context);
//            setCanceledOnTouchOutside(false);
        }
        @Override
        public View onCreatePopupView() {
            View inflate = View.inflate(mContext, R.layout.dialog_anim_popup_custom, null);
            ButterKnife.bind(this, inflate);
            return inflate;
        }
        @Override
        public void setUiBeforShow() {
            mTvItem1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    T.showShort(mContext, mTvItem1.getText());
                }
            });
            mTvItem2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    T.showShort(mContext, mTvItem2.getText());
                }
            });
            mTvItem3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    T.showShort(mContext, mTvItem3.getText());
                }
            });
            mTvItem4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    T.showShort(mContext, mTvItem4.getText());
                }
            });
        }
    }

R.layout.dialog_anim_popup_custom布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <LinearLayout
        android:id="@+id/ll_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:orientation="vertical"
        android:paddingLeft="15dp"
        android:paddingRight="15dp">
        <TextView
            android:id="@+id/tv_item_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="15dp"
            android:text="标记已读"
            android:textColor="#666666"
            android:textSize="15sp"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#eeeeee"/>
        <TextView
            android:id="@+id/tv_item_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="15dp"
            android:text="全部标记已读"
            android:textColor="#666666"
            android:textSize="15sp"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#eeeeee"/>
        <TextView
            android:id="@+id/tv_item_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="15dp"
            android:text="标签"
            android:textColor="#666666"
            android:textSize="15sp"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#eeeeee"/>
        <TextView
            android:id="@+id/tv_item_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="15dp"
            android:text="添加星标"
            android:textColor="#666666"
            android:textSize="15sp"/>
    </LinearLayout>
</RelativeLayout>

注意事项

使用这个通用PopupWindow需要依赖FlycoDialog_Lib.aar,Popupwindow中还有一些其他的设置可以控制,如果要Popupwindow进出场动画,需要继承BaseAnimatorSet抽象类,重写void setAnimation(View view)方法即可。

版本控制

版本号 更新内容 修改人 修改时间
1.0 初次发布 lucky_bear 2017/7/13

项目地址

所在文件夹 demo位置
widget.FlycoDialog com.qr.demo.widget.popupwindow.PopupActivity

相关文章

网友评论

      本文标题:通用PopupWindow

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