我使用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()
。
生成的对话框是,
我想删除那些角落的白色背景。我在这里搜索了100个问题,没有答案可以让我得到完美的圆角警报对话框。任何帮助将不胜感激!
答案 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)
答案 6 :(得分:1)
如果您的对话框是AlertDialog
或Dialog
的实例,请在代码中添加以下内容:
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)
使用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.布局中的输出
机器人:背景= “@绘制/ dialog_corner”
3.在java文件中保留以下代码
View mView =LayoutInflater.from(mContext).inflate(R.layout.layout_pob,null);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));