Android AlertDialog标题背景颜色

时间:2015-12-12 12:50:18

标签: android alertdialog android-theme

有没有办法更改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>

我得到的就像这样,

enter image description here

我怎样才能让它看起来像这样,

enter image description here

使用

<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>

给出

enter image description here

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

4 个答案:

答案 0 :(得分:9)

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

LayoutInflater inflater = this.getLayoutInflater();

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

    new AlertDialog.Builder(SubCategoryActivity.this)
                        .setCustomTitle(titleView);

在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>

答案 1 :(得分:0)

使用自定义Alerbox,在click上使用此代码。我制作了自定义布局&#34; alert_input&#34;和OK和取消选项将显示

 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();

答案 2 :(得分:0)

我想,自定义样式不起作用的原因是因为默认填充(围绕整个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>

enter image description here

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>

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();

enter image description here

答案 3 :(得分:0)

使用androidx.appcompat.app.AlertDialog

AlertDialog alertdialog;
...
alertdialog.show();
final View v = alertdialog.findViewById(R.id.title_template);
if (v != null)
    v.setBackgroundColor(myColor);