通用PopupWindow

組件介紹

這個(gè)組件簡(jiǎn)便了android開(kāi)中使用PopupWindow,不需要寫(xiě)更多繁瑣的代碼,即可實(shí)現(xiàn)具有自定義動(dòng)畫(huà)、顯示位置的PopupWindow。

動(dòng)態(tài)圖

pop.gif

使用場(chǎng)景

android中所有的彈窗,如輸入密碼框、列表選項(xiàng)等都可以使用,目前有兩種類型的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("最美的不是下雨天,是曾與你躲過(guò)雨的屋檐~");
        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="標(biāo)記已讀"
            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="全部標(biāo)記已讀"
            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="標(biāo)簽"
            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="添加星標(biāo)"
            android:textColor="#666666"
            android:textSize="15sp"/>
    </LinearLayout>
</RelativeLayout>

注意事項(xiàng)

使用這個(gè)通用PopupWindow需要依賴FlycoDialog_Lib.aar,Popupwindow中還有一些其他的設(shè)置可以控制,如果要Popupwindow進(jìn)出場(chǎng)動(dòng)畫(huà),需要繼承BaseAnimatorSet抽象類,重寫(xiě)void setAnimation(View view)方法即可。

版本控制

版本號(hào) 更新內(nèi)容 修改人 修改時(shí)間
1.0 初次發(fā)布 lucky_bear 2017/7/13

項(xiàng)目地址

所在文件夾 demo位置
widget.FlycoDialog com.qr.demo.widget.popupwindow.PopupActivity
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容