具有圆角和透明背景的Android自定义警报对话框

时间:2014-02-14 13:58:13

标签: android transparency android-alertdialog rounded-corners

我使用onDraw的{​​{1}}创建了一个带圆角的自定义AlertDialog,如下所示,

LinearLayout

然后我按public class RoundedLinearLayout extends LinearLayout { private Paint drawPaint; private Paint roundPaint; private int mCornerRadius = 100; private RectF bounds; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public RoundedLinearLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); onInit(); } public RoundedLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); onInit(); } public RoundedLinearLayout(Context context) { super(context); onInit(); } protected void onInit() { drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG); drawPaint.setColor(0xffffffff); drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); roundPaint.setColor(0xffffffff); setWillNotDraw(false); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (w != oldw && h != oldh) { bounds = new RectF(0, 0, w, h); } } @Override protected void dispatchDraw(Canvas canvas) { Bitmap bitmap = Bitmap.createBitmap((int) bounds.width(), (int) bounds.height(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bitmap); super.dispatchDraw(c); BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setShader(shader); canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, paint); } } 添加透明度并设置getWindow()。 生成的对话框是,

Custom alert with transparency

我想删除那些角落的白色背景。我在这里搜索了100个问题,没有答案可以让我得到完美的圆角警报对话框。任何帮助将不胜感激!

9 个答案:

答案 0 :(得分:9)

我使用它并且它对我有用:

ConfirmacionMensaje customDialog = new ConfirmacionMensaje(MainActivity.this);
customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customDialog.show();

ConfirmacionMensaje来自Dialog

这是我的对话框xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid android:color="#ffDB0000"/>
<corners
    android:bottomLeftRadius="4dp"
    android:bottomRightRadius="4dp"
    android:topLeftRadius="4dp"
    android:topRightRadius="4dp" />
</shape>

答案 1 :(得分:6)

使用警告对话框使用简单对话框

 LayoutInflater  factory = LayoutInflater.from(getActivity());
            AlertDialog alert = new AlertDialog.Builder(getActivity());

        Dialog  dialog = new Dialog(getActivity());

            dialog.setContentView(your layout);

            dialog.getWindow().setBackgroundDrawable(
                    new ColorDrawable(android.graphics.Color.TRANSPARENT));

答案 2 :(得分:5)

使用此:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

这是最简单的解决方案,并且有效。

答案 3 :(得分:2)

这对我有用

dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_verification));

后台验证是我的可绘制文件

答案 4 :(得分:2)

这可以解决:

   dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_verification));

答案 5 :(得分:1)

你确定要使用对话框吗? 它看起来更像是一个临时的弹出窗口,比如吐司或烤面包片:

关于背景,您可以使用9-patch或自定义xml drawable(示例herehere)...

答案 6 :(得分:1)

如果您的对话框是AlertDialogDialog的实例,请在代码中添加以下内容:

myDialog
    .getWindow()
    .setBackgroundDrawable(new ColorDrawable(Color.argb(0,0,0,0)));

附注:扩展LinearLayout以应用圆形框,在我看来这不是一个好习惯,您也可以通过非常简单的XML表示来完成此操作,在这种情况下,XML矩形形状可以提供更多帮助:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <corners
        android:radius="3dp" />
    ...
</shape>

答案 7 :(得分:1)

这对我来说是第一次

dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_verification));

这里我从drawable文件夹获取资源,background_verification是可绘制文件

答案 8 :(得分:0)

  1. 使用dialog_corner在drawable文件夹中创建xml。

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/main_background"/> <corners android:topLeftRadius="@dimen/margin_10" android:topRightRadius="@dimen/margin_10" android:bottomRightRadius="@dimen/margin_10" android:bottomLeftRadius="@dimen/margin_10" /> </shape>

  2. 2.布局中的输出

    机器人:背景= “@绘制/ dialog_corner”

    3.在java文件中保留以下代码

    View mView =LayoutInflater.from(mContext).inflate(R.layout.layout_pob,null); 
             alertDialog.getWindow().setBackgroundDrawable(new   ColorDrawable(Color.TRANSPARENT));