Android对话 - 圆角和透明度

gre*_*guy 20 android dialog transparent android-layout android-alertdialog

我正在尝试使用圆角制作自定义的android对话框.我目前的尝试给了我这个结果.

圆角对话框

正如您所看到的,角落是圆的,但它仍然保持完整的白色角落.

下面是我放在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>
Run Code Online (Sandbox Code Playgroud)

下面是对话框的布局.

<?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>
Run Code Online (Sandbox Code Playgroud)

以下是我创建对话框的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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

小智 30

我找到的唯一解决方案是在这里.使用Dialog而不是AlertDialog并设置透明背景:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
因此您无法使用构建器.但是如果遵循最佳指南,您也可以在DialogFragment的onCreateDialog回调中使用新的Dialog().

这也适用于姜饼.

除了分层的drawable可以简化为一个形状,边框为xml元素<stroke>.


小智 15

在制作扩展DialogFragment的对话框并修复此问题时,我遇到了类似的问题:

dialog.setStyle(DialogFragment.STYLE_NO_FRAME, 0);
Run Code Online (Sandbox Code Playgroud)

像这样:

public class ConfirmBDialog extends DialogFragment {

public static ConfirmBDialog newInstance() {
    ConfirmBDialog dialog = new ConfirmBDialog();
    Bundle bundle = new Bundle();
    dialog.setArguments(bundle);

    return dialog;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // This removes black background below corners.
    setStyle(DialogFragment.STYLE_NO_FRAME, 0);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.confirm_dialog, container, true);
    getDialog().setCanceledOnTouchOutside(true);
    return view;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • @greatergoodguy,如果这个答案是你的问题的解决方案,请接受它 (2认同)
  • 这很完美,谢谢!这是我发现与DialogFragments一起使用的唯一解决方案...... (2认同)

UmA*_*orn 7

试一试

myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)


Dav*_*shi 2

使用 9 片 PNG,这些角具有透明度。