I have created a custom AlertDialog with rounded corners using onDraw
of LinearLayout
as below,
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);
}
}
And then I added transparency by getWindow()
and setting window.alpha = 0.5f
.
The resulting dialog is,
I want to remove those corner white background. I have searched 100s of questions here and no answer could get me the perfect rounded corner alert dialog. Any help would be appreciated!
I use this and it worked for me:
ConfirmacionMensaje customDialog = new ConfirmacionMensaje(MainActivity.this);
customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customDialog.show();
ConfirmacionMensaje exntends from Dialog
and this is my xml for Dialog:
<?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>
Do use alert dialog use simple dialog
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));
Use this :
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
It is the simplest solution and it works.
This worked for me
dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_verification));
background verification is my drawable file
This can be solved:
dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_verification));
are you sure you want to use a dialog? it seems more like a temporary popup, like a toast or a crouton:
- http://www.grokkingandroid.com/useful-android-libraries-crouton/
- http://www.androidviews.net/2013/05/httpsimonvt-github-iomessagebar/
- https://plus.google.com/+RomanNurik/posts/RA9WEEGWYp6 .
about the background, you could use one with 9-patch or a custom xml drawable (example here and here) ...
If your dialog is an instance of either AlertDialog
or Dialog
add the following to your codes:
myDialog
.getWindow()
.setBackgroundDrawable(new ColorDrawable(Color.argb(0,0,0,0)));
Side note: Extending LinearLayout
for applying rounded box, in my opinion is not a good practice, You can alternatively do this by the very straightforward XML representation, in this case a XML rectangular shape can help much more :
<shape xmlns:android="http://schemas.android.com/apk/res/android">
...
<corners
android:radius="3dp" />
...
</shape>
this is worked for me,for the first time
dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_verification));
here i am getting the resource from drawable folder,background_verification is drawable file
create xml in drawable folder with dialog_corner.
<?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.put in layout
android:background="@drawable/dialog_corner"
3.in you java file keep below code
View mView =LayoutInflater.from(mContext).inflate(R.layout.layout_pob,null);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
来源:https://stackoverflow.com/questions/21781352/android-custom-alert-dialog-with-rounded-corners-and-transparent-background