1. 程式人生 > >帶半透明背景圖的彈框(dialog)

帶半透明背景圖的彈框(dialog)

在開發中。我們經常會遇到帶半透明背景圖的彈框 ,如圖:


我在開發中用到這種情況也比較多。剛開始在網上搜尋了很多資料。但是很多隻寫了一般。達不到實際效果。自己根據資料還有實踐最終實現了效果:廢話不多說。直接上程式碼

首先自定義一個半透明的背景樣式

<!-- 對話方塊樣式 -->
    <style name="Theme.Light.Dialog" parent="android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:scrollHorizontally">true</item>
    </style>
如果說有特別要求必須從底部彈出的話則可以加上一下動畫
<!-- 彈出框動畫 由下至上 -->
    <style name="dialogStyle" parent="@android:style/Animation.Dialog">
        <item name="@android:windowEnterAnimation">@anim/yl_dialog_enter</item>
        <!-- 進入時的動畫 -->
        <item name="@android:windowExitAnimation">@anim/yl_dialog_exit</item>
        <!-- 退出時的動畫 -->
    </style>

進入時的動畫

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="200"
        android:fromYDelta="100%"></translate>
</set>
退出時的動畫
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="200"
        android:toYDelta="100%"></translate>
</set>


如此前面就設定好了就可以設定自己的dialog了
dialog = new Dialog(this, R.style.Theme_Light_Dialog);
        View dialogView = LayoutInflater.from(this).inflate(R.layout.yl_dialog, null);
        TextView cancel = (TextView) dialogView.findViewById(R.id.cancel);
        TextView submit = (TextView) dialogView.findViewById(R.id.submit);
        //獲得dialog的window視窗
        Window window = dialog.getWindow();
        //設定dialog在螢幕底部
        window.setGravity(Gravity.CENTER);
        //設定dialog彈出時的動畫效果,從螢幕底部向上彈出
//        window.setWindowAnimations(R.style.dialogStyle);
        window.getDecorView().setPadding(ScreenUtils.Dp2Px(23), 0, ScreenUtils.Dp2Px(23), 0);
        //獲得window視窗的屬性
        WindowManager.LayoutParams lp = window.getAttributes();
        //設定視窗寬度為充滿全屏
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        //設定視窗高度為包裹內容
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        //將設定好的屬性set回去
        window.setAttributes(lp);
        //將自定義佈局載入到dialog上
        dialog.setContentView(dialogView);
        cancel.setOnClickListener(this);
        submit.setOnClickListener(this);
        dialog.show();
如此我們的帶半透明背景色的dialog就完成了。希望能對大家有所幫助