Android DialogFragment - 如何以编程方式更改带圆角的对话框片段的颜色

时间:2017-08-08 00:01:15

标签: android xml drawable

对此进行了相当多的研究,但我对Layer list的经验仍然不足。这是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="10dip"/>
        <padding
            android:bottom="2dip"
            android:left="8dip"
            android:right="8dip"
            android:top="2dip"/>
    </shape>
</item>

<item
    android:id="@+id/dialog_bg">
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#FFFFFF"/>
        <stroke
            android:width="16dip"
            android:color="#FFFFFF"/>

        <padding
            android:bottom="2dip"
            android:left="8dip"
            android:right="8dip"
            android:top="2dip"/>
    </shape>
</item>
</layer-list>

我对如何做到这一点有正确的想法吗?

我想要使用这个java方法:

getDialog().getWindow().setBackgroundDrawableResource(R.drawable.rounded_corners_dialog);

但是我将如何改变它的颜色,稍后在代码中?

谢谢,

Ť

1 个答案:

答案 0 :(得分:2)

您可以将CardView作为自定义DialogFragment布局的父容器。这是一个简单的例子:

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:cardCornerRadius="8dp"
    app:cardElevation="10dp"
    app:cardUseCompatPadding="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
        //Put all your views here

    </LinearLayout>
</android.support.v7.widget.CardView>

现在,您的课程会延伸DialogFragment覆盖onCreateDialog,如下所示:

@NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }

现在,您可以创建一个圆角,然后可以更改CardView的背景颜色。试试吧:))