Android AlertDialog标题背景颜色

Ros*_*han 7 android android-theme android-alertdialog

有没有办法改变AlertDialog的标题背景颜色(android.support.v7.app.AlertDialog)?? 目前我的主题是

 <item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>

 <style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">@color/colorAccent</item>
  </style>
Run Code Online (Sandbox Code Playgroud)

我这样得到它,

在此输入图像描述

我怎么能让它看起来像这样

在此输入图像描述

运用

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowTitleStyle">@style/DialogTitle</item>
    </style>

    <style name="DialogTitle">
        <item name="android:background">@color/colorPrimary</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

关于如何实现这一点的任何想法?

ice*_*rit 10

您可以像这样设置自定义标题

LayoutInflater inflater = this.getLayoutInflater();

    View titleView = inflater.inflate(R.layout.custom_title, null);

    new AlertDialog.Builder(SubCategoryActivity.this)
                        .setCustomTitle(titleView);
Run Code Online (Sandbox Code Playgroud)

在custom_title布局中,您可以像这样创建自定义标题

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:id="@+id/llsubhead"
        android:background="@color/colorPrimary">

        <TextView
            android:id="@+id/exemptionSubHeading4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:layout_weight="1"
            android:text="Exemption Sub Head"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textColor="@color/white" />
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)


Sam*_*hen 9

我想,自定义样式不起作用的原因是因为默认填充(围绕整个 AlertDialog 布局)仍然存在:

<style name="myAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowTitleStyle">@style/myDialogTitle</item>
</style>

<style name="myDialogTitle" parent="TextAppearance.AppCompat.Title">
    <item name="android:background">@color/colorPrimary</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

而且getResource.getIdentifier()findViewByid()不起作用(到目前为止我已经尝试过)。因此,setCustomTitle()成为唯一的途径。


1. 为 AlertDialog 创建自定义标题布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_red_light"
    android:orientation="vertical"
    android:paddingStart="24dp"                         //following Material Design guideline
    android:paddingTop="16dp"
    android:paddingEnd="24dp"
    android:paddingBottom="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Marvel Cinematic Universe"
        android:textAppearance="@style/TextAppearance.AppCompat.Title"      //key point 1, using AlertDialog default text style
        android:textColor="@android:color/white" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

2.使用“setCustomTitle()”将自定义标题布局应用到AlertDialog

AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
View titleView = getLayoutInflater().inflate(R.layout.dialog_title, null);

builder.setCustomTitle(titleView);                      //key point 2
builder.setMessage(R.string.main_marvel_info);
builder.setPositiveButton("OK", null);

builder.create().show();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


the*_*lko 0

使用自定义警报框,单击时使用此代码。我制作了自定义布局“alert_input”,将显示“确定”和“取消”选项

 LayoutInflater layoutInflater = LayoutInflater.from(Login.this);
                View promptView = layoutInflater.inflate(R.layout.alert_input, null);
                final EditText editText = (EditText) promptView.findViewById(R.id.alertEdit2);
                final EditText editText2 = (EditText) promptView.findViewById(R.id.alertEdit3);
                final TextView at=(TextView)findViewById(R.id.alertText);

                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Login.this,AlertDialog.THEME_HOLO_LIGHT);
                alertDialogBuilder.setView(promptView);
                alertDialogBuilder.setCancelable(false)
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {


                            }
                        })
                        .setNegativeButton("Cancel",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });

                // create an alert dialog
                AlertDialog alert = alertDialogBuilder.create();
                alert.show();
Run Code Online (Sandbox Code Playgroud)