首页 > 技术文章 > 自定义圆角透明的Dialog

sesexxoo 2015-07-19 23:48 原文

自定义圆角透明的Dialog


说明

系统默认的Dialog默认是背景不透明的,有时候项目需要Dialog为圆角透明,这个时候的解决方案就是---重写Dialog

- 系统样式
p1
- 自定义以后的样式
p2

自定义一个Dialog,继承Dialog

    package ktalk.kong.qingwei.kcornerdialog;

    import android.app.Dialog;
    import android.content.Context;
    import android.view.Gravity;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;

    public class KCornerDialog extends Dialog {

    private static int default_width = 160; // 默认宽度
    private static int default_height = 120;// 默认高度

    private boolean noBackPressed = false;

    public KCornerDialog(Context context, View layout, int style) {
        this(context, default_width, default_height, layout, style);
    }

    public KCornerDialog(Context context, int width, int height, View layout, int style) {
        super(context, style);
        // 加载布局
        setContentView(layout);
        // 设置Dialog参数
        Window window = getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.gravity = Gravity.CENTER;
        window.setAttributes(params);
    }

    /**
     * 设置返回键
     *
     * @param b
     */
    public void setBackPressed(boolean b) {
        noBackPressed = b;
    }

    @Override
    public void onBackPressed() {
        if (!noBackPressed) {
            super.onBackPressed();
        }
    }
    }
  • 说明

    public KCornerDialog(Context context, int width, int height, View layout, int style)
    这个构造方法的最后一个参数,是一个style,需要我们自己去设定Dialog样式,我们的需求是,设置一个圆角的背景图片后,让Dialog是圆角透明的

Style

在styles.xml文件中加入样式
res->values->styles.xml

<style name="KCornerDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.6</item>
    </style>
  • 到这里,自定义的圆角Dialog就写完了,下面介绍下使用

自定义Dialog的使用

  /**
     * 显示自定义圆角Dialog
     */
    private void showCornerDialog() {
        Toast.makeText(this, "显示自定义圆角Dialog", Toast.LENGTH_SHORT).show();
        View view = View.inflate(this, R.layout.corner_dialog_view, null);
        KCornerDialog kCornerDialog = new KCornerDialog(this, 0, 0, view, R.style.KCornerDialog);
        kCornerDialog.show();
    }
  • 最后一个参数 R.style.KCornerDialog 就是我们加入的Dialog样式

有的Dialog可能需要禁掉返回键,例如有时候需要强制用户执行某些操作,思路还是一样,在自定义的Dialog下控制onBackPressed就行了,这里已经写好了

  • // 禁用返回键 kCornerDialog.setBackPressed(true);
  • // 开放返回键 kCornerDialog.setBackPressed(false);

Dialog里面的布局实现就自行发挥把

推荐阅读