帶半透明背景圖的彈框(dialog)
阿新 • • 發佈:2019-01-24
在開發中。我們經常會遇到帶半透明背景圖的彈框 ,如圖:
我在開發中用到這種情況也比較多。剛開始在網上搜尋了很多資料。但是很多隻寫了一般。達不到實際效果。自己根據資料還有實踐最終實現了效果:廢話不多說。直接上程式碼
首先自定義一個半透明的背景樣式
如果說有特別要求必須從底部彈出的話則可以加上一下動畫<!-- 對話方塊樣式 --> <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就完成了。希望能對大家有所幫助