安卓对话框 - 圆角和透明度

25

我正在尝试制作一个带圆角的自定义安卓对话框。目前我的尝试已经给了我这个结果。

rounded corner dialog

你可以看到,四个角已经被弄成了圆角,但是白色角仍然保持不变。

下面是我放置在drawable文件夹中用于创建带有圆角的蓝色对话框和红色边框的xml代码。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item> 
        <shape 
            android:shape="rectangle">
            <solid android:color="@color/transparent_black" />
            <corners android:radius="@dimen/border_radius"/>
        </shape>
    </item>   
    <item 
        android:left="@dimen/border_width" 
        android:right="@dimen/border_width"  
        android:top="@dimen/border_width"
        android:bottom="@dimen/border_width" >  

        <shape android:shape="rectangle"> 
            <solid android:color="@color/blue" />
            <corners android:radius="@dimen/border_radius"/>
        </shape>
    </item>    
</layer-list>

以下是对话框的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/fill"
android:orientation="vertical"
android:layout_margin="@dimen/spacing_normal"
android:padding="@dimen/spacing_normal"

android:background="@drawable/border_error_dialog" >

<RelativeLayout 
    style="@style/block"
    android:layout_gravity="center" >

    <ImageView
        android:id="@+id/imageView1"
        style="@style/wrap"
        android:layout_alignParentLeft="true"
        android:layout_centerHorizontal="true"
        android:contentDescription="@string/content_description_filler"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        style="@style/error_text"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageView1"
        android:text="@string/error_login" />

</RelativeLayout>

<Button
    android:id="@+id/button1"
    style="@style/wrap"
    android:layout_gravity="center"
    android:text="Button" />

</LinearLayout>

以下是我创建对话框所在的 Activity。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);

            View child = getLayoutInflater().inflate(R.layout.dialog_custom_tom, null);
            alertDialogBuilder.setView(child);

            AlertDialog alertDialog = alertDialogBuilder.create();

            alertDialog.show();
        }
    });
}

经过长时间的挣扎和遇到的一些问题,我找到了一个相当简洁的答案,适用于API < 11:https://dev59.com/EWMl5IYBdhLWcg3wRlTp#25887869。 - andrew
可能是DialogFragment全屏显示两侧出现填充的重复问题。 - Cindy Meister
11个回答

1
我会在这里发布我的解决方案,因为它可能有所帮助。适用于我的解决方案是在布局xml中设置可绘制资源,并且在启动对话框的活动中也设置,而不是从AlertDialog切换到Dialog。
这意味着在我们创建对话框设计的布局alert_dialog_design.xml中,我们将使用我们自己定义的背景alert_dialog_shape.xml填充android:background属性。
android:background="@drawable/alert_dialog_shape"

但也可以在启动对话框的活动内部使用它:
alert.getWindow().setBackgroundDrawableResource(R.drawable.alert_dialog_shape);

这样,您自定义布局的父级(警报本身)将具有所需的形状。使用此方法,我实现了以下内容:

https://istack.dev59.com/drCw3.webp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接