自定义dialog 背景属性差异

比如正常要实现的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,分别效果:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值