比如正常要实现的dialog效果:
代码如此:
public class SimpleDialog extends Dialog {private Button permissionokTv;//确定按钮private Button permissionnoTv;//取消按钮private TextView permissiontitleTv;//消息标题文本private TextView permissioncontentTv;//消息提示文本public SimpleDialog(@NonNull Context context, @StyleRes int themeResId) {super(context, themeResId);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simlpe_dialog);setDialogStats();setCanceledOnTouchOutside(false);setCancelable(false);//初始化界面控件initView();}/*** 设置dialog 熟悉*/private void setDialogStats() {Window window = this.getWindow();//1
// window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);//(设置模糊)//2
// window.addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);//(设置暗淡)// window.setBackgroundDrawableResource(R.color.transparent);//设置背景透明WindowManager.LayoutParams layoutParams = window.getAttributes();
// layoutParams.alpha = 0.9f;
// layoutParams.alpha = 1f;//设置透明度(Dialog自身的透明度)//3
// layoutParams.dimAmount = 0.5f;//设置黑暗度(Dialog 窗口背景的黑暗度)layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;layoutParams.gravity = Gravity.CENTER;window.setAttributes(layoutParams);}/*** 初始化界面控件*/private void initView() {permissionokTv = findViewById(R.id.permissionokTv);permissionnoTv = findViewById(R.id.permissionnoTv);permissiontitleTv = (TextView) findViewById(R.id.permissiontitleTv);permissioncontentTv = (TextView) findViewById(R.id.permissioncontentTv);//设置确定按钮被点击后,向外界提供监听permissionokTv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dismiss();}});//设置取消按钮被点击后,向外界提供监听permissionnoTv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dismiss();}});}}
style:
<style name="DialogStyle" parent="@android:style/Theme.Dialog"><!--背景颜色及和透明程度--><item name="android:windowBackground">@android:color/transparent</item><!--是否去除标题 --><item name="android:windowNoTitle">true</item><!--是否去除边框--><item name="android:windowFrame">@null</item><!--是否浮现在activity之上--><item name="android:windowIsFloating">true</item><!--设置底层是否可见--><item name="android:windowIsTranslucent">true</item><item name="android:windowFullscreen">true</item><!--是否模糊-->
<!-- <item name="android:backgroundDimEnabled">false</item>-->
<!-- <item name="android:backgroundDimAmount">0.5</item>--><!-- android:backgroundDimEnabled,设置为true时候,整个Dialog的大背景就是半透明的黑色,如果设置为false就是全透明android:backgroundDimAmount表示暗度,0.0f完全不暗,即背景是可见的 ,1.0f时候,背景全部变黑暗 -->
</style>
布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"><androidx.appcompat.widget.LinearLayoutCompatandroid:orientation="vertical"android:layout_width="match_parent"android:layout_marginHorizontal="30dp"android:background="@color/white"android:layout_height="wrap_content"><androidx.appcompat.widget.AppCompatTextViewandroid:id="@+id/permissiontitleTv"android:gravity="center"android:layout_width="match_parent"android:layout_height="50dp"android:text="提示标题"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="@color/cardview_shadow_start_color"/><androidx.appcompat.widget.AppCompatTextViewandroid:id="@+id/permissioncontentTv"android:gravity="center"android:layout_width="match_parent"android:layout_height="50dp"android:text="提示内容"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="@color/cardview_shadow_start_color"/><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/permissionokTv"android:gravity="center"android:layout_width="match_parent"android:layout_height="50dp"android:textColor="@color/black"android:text="ok"/><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/permissionnoTv"android:gravity="center"android:layout_width="match_parent"android:layout_height="50dp"android:textColor="@color/black"android:text="no"/></androidx.appcompat.widget.LinearLayoutCompat></androidx.appcompat.widget.LinearLayoutCompat>
属性:
SimpleDialog 代码里不做特殊设置的话,针对style文件属性:
<item name="android:windowBackground">@android:color/transparent</item>
-设置window背景透明。
不写时默认布局底层黑色背景,如左侧;设置透明色时如右侧。
<item name="android:backgroundDimEnabled">false</item>
-设置为true时候,整个Dialog的大背景就是半透明的黑色,如果设置为false就是全透明。
false时效果如左侧。true时如右侧。
<item name="android:backgroundDimAmount">0.5</item>
-表示暗度,0.0f完全不暗,即背景是可见的 ,1.0f时候,背景全部变黑暗。
0.1如左侧,0.9如右侧。
SimpleDialog 代码里:
layoutParams.dimAmount = 0.5f;//设置黑暗度(Dialog 窗口背景的黑暗度)
-设置黑暗度
跟style <item name="android:backgroundDimAmount">0.5</item> 效果一样。
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);//(设置模糊)
or
window.addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);//(设置暗淡)
也是有相应的效果
//layoutParams.alpha = 0.9f;
layoutParams.alpha = 1f;//设置透明度(Dialog自身的透明度)
-修改Dialog自身的透明度
0.5-0.9-1,分别效果: