使用Dialog實現PopupWindow效果

效果圖:
在這裏插入圖片描述
Dialog的使用對Android開發者來說再經常不過了,這裏分享一種使用Dialog實現PopupWindow效果的方法。

一、我們最好寫一個工具類,用的時候直接調:

public class DialogUtils {

    public static void showDialog(Context context, final OnTextClickListener onTextClickListener) {
        Dialog dialog = new Dialog(context, R.style.DialogCommonStyle);
        Window window = dialog.getWindow();
        window.setGravity(Gravity.BOTTOM);// 位置
        window.setContentView(R.layout.layout_my_dialog);

        // 這裏findViewBuId初始化控件,設置數據等等。
        // 。。。
        // 。。。
        TextView textView = window.findViewById(R.id.textView);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onTextClickListener.onTextClick("傳遞數據");
            }
        });

        dialog.setCanceledOnTouchOutside(true);// 觸摸外面關閉dialog
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = ScreenUtils.getScreenWidth(context);// dialog寬等於屏幕寬
        lp.height = ScreenUtils.getScreenHeight(context) * 1/2;// dialog高爲屏幕高一半
        window.setAttributes(lp);
        window.setBackgroundDrawableResource(R.color.black);// dialog背景
        window.setWindowAnimations(R.style.AnimBottom);
        dialog.show();
    }
    
    public interface OnTextClickListener {
        void onTextClick(String str);
    }
    
}

我們在layout_my_dialog.xml中自己佈局,我這裏只放了一個TextView作爲例子,當然你可以放複雜的佈局,例如:RecyclerView、自定義控件等等。通過定義接口來回調數據,這樣做就完美的和activity分離了,而且複用性很強。

style.xml

<style name="DialogCommonStyle" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.6</item>
    </style>
<!-- 從底部往上推出的動畫 -->
    <style name="AnimBottom" parent="@android:style/Animation">
        <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
    </style>

push_bottom_in.xml

<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="200"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    <alpha
        android:duration="200"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

push_bottom_out.xml

<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">


    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="50%p" />
    <alpha
        android:duration="200"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章