Набор AlertBox Заголовок Цвет Фона

Как изменить цвет фона для строки заголовка alertbox?

AlertDialog.Builder alert=new AlertDialog.Builder(getParent());
alert.setTitle("sample");
alert.show();

3 ответов


самый простой способ-подкласс диалога путем создания класса, который расширяет диалог и реализует конструктор, который принимает стиль в качестве параметра. Затем сделайте свой собственный макет.

код для отображения диалога:

private void showDialog()
{
    Custom_Dialog dialog = new Custom_Dialog(this, R.style.myCoolDialog);

    dialog.setContentView(R.layout.custom_dialog);
    dialog.setTitle("Custom Dialog");

    TextView text = (TextView) dialog.findViewById(R.id.text);
    text.setText("Hello, this is a custom dialog!");
    ImageView image = (ImageView) dialog.findViewById(R.id.image);
    image.setImageResource(R.drawable.icon);

    dialog.show();  
}

код подкласса:

package com.stackoverflow;

import android.app.Dialog;
import android.content.Context;

public class Custom_Dialog extends Dialog {

    protected Custom_Dialog(Context context, int theme) {
        super(context, theme);
        // TODO Auto-generated constructor stub
    }

}

на стиль: myCoolDialog.в XML

<resources>
    <style name="myCoolDialog" parent="android:Theme.Dialog"> 
        <item name="android:windowBackground">@drawable/blue</item>
        <item name="android:colorForeground">#f0f0</item> 
     </style> 
</resources>

и планировка:custom_dialog начиная.в XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="10dp"
              >
    <ImageView android:id="@+id/image"
               android:layout_width="wrap_content"
               android:layout_height="fill_parent"
               android:layout_marginRight="10dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
              />
</LinearLayout>

Вы можете просто установить пользовательский заголовок, как это

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>

из ответа @CornflakesDK и @ice spirit я думал, что вы можете использовать текущий AlertDialog.Builder реализация, чтобы сделать пользовательский диалог и сделать его простым в обслуживании.

CustomDialogBuilder.java

public class CustomDialogBuilder extends AlertDialog.Builder {

  private View view;

  public CustomDialogBuilder(Context context) {
    super(context);
    view = LayoutInflater.from(getContext()).inflate(R.layout.custom_dialog_title, null);
    setCustomTitle(view);
  }

  @Override
  public Builder setTitle(int titleId) {
    TextView titleTextView = view.findViewById(R.id.exemptionSubHeading4);
    titleTextView.setText(getContext().getString(titleId));
    return this;
  }

  @Override
  public Builder setTitle(CharSequence title) {
    TextView titleTextView = view.findViewById(R.id.exemptionSubHeading4);
    titleTextView.setText(title);
    return this;
  }
}

custom_dialog начиная.в XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">
  <LinearLayout
    android:id="@+id/llsubhead"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:background="@color/black"
    android:orientation="vertical">
    <TextView
      android:id="@+id/exemptionSubHeading4"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:layout_margin="15dp"
      android:layout_gravity="center"
      android:text="Exemption Sub Head"
      android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
      android:textColor="@color/white" />
  </LinearLayout>
</LinearLayout>

внутри вашего кода активности,

 new CustomDialogBuilder(MyActivity.this)
                  .setTitle(R.string.actions)
                  .setItems(R.array.items_actions, (dialog, which) -> {
                    // handle items
                  }).create().show();

затем вы можете иметь стиль внутри DialogBuilder, а также использовать функции AlertDialog.Строитель.