比如正常要实现的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);
}
@Override
protected 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() {
@Override
public void onClick(View v) {
dismiss();
}
});
//设置取消按钮被点击后,向外界提供监听
permissionnoTv.setOnClickListener(new View.OnClickListener() {
@Override
public 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.LinearLayoutCompat
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_marginHorizontal="30dp"
android:background="@color/white"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/permissiontitleTv"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="提示标题"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/cardview_shadow_start_color"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/permissioncontentTv"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="提示内容"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/cardview_shadow_start_color"
/>
<androidx.appcompat.widget.AppCompatButton
android: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.AppCompatButton
android: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,分别效果:


1722

被折叠的 条评论
为什么被折叠?



