Android - Изменить пользовательский фон заголовка диалога - PullRequest
9 голосов
/ 16 февраля 2012

Я создаю собственный диалог и хочу знать, как изменить фон строки заголовка.

Я пробовал два подхода:

1 - я пробовалAlertDialog.Builder метод 'setCustomTitle'.Я создал простой вид макета, включающий текстовое представление с шириной макета и высотой «match_parent» и цветом фона.Когда я запускаю приложение, только верхняя половина строки заголовка показывает цвет фона.В нижней части все еще отображается цвет фона темы по умолчанию.Кто-нибудь знает почему?

2 - я создал свою собственную тему диалога.Я создал стиль с родительским наследованием для «@android: style / Theme.Holo.Light.Dialog».Затем я передал это в конструктор AlertDialog.Builder - новый AlertDialog.Builder (это R.style.test_dialog).Это кажется хорошим, но так или иначе диалог обернут внутри диалога.Квадратная рамка окружает диалог.Кто-нибудь знает почему?

Ответы [ 5 ]

37 голосов
/ 16 февраля 2012

Вы можете создать стиль, например,

<style name="cust_dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowTitleStyle">@style/dialog_title_style</item>
  </style>

<style name="dialog_title_style" parent="android:Widget.TextView">
    <item name="android:background">@android:color/black</item>
    <item name="android:padding">10dp</item>
</style>

И вы можете создать диалоговое окно:

Dialog dialog=new Dialog(this,R.style.cust_dialog);
dialog.setContentView(R.layout.fragment_features_dialog);
dialog.setTitle(R.string.features);

Теперь диалоговое окно отображается с черным цветом фона заголовка.

4 голосов
/ 18 ноября 2013

Внешний вид диалогового окна внутри диалога вызван фоном окна диалога.Это есть в каждом диалоге, но в диалоговых окнах Android по умолчанию фон окна установлен прозрачным.Чтобы сделать это, добавьте этот элемент в свою собственную тему диалога:

<style name="CustomDialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style> 
1 голос
/ 09 февраля 2017

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

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 голос
/ 29 января 2016

Создайте файл макета xml для заголовка, накачайте его и установите для AlertDialog значение

View view = getLayoutInflater().inflate(R.layout.cust_dialog_title, null);
alertDialog.setCustomTitle(view);
1 голос
/ 16 февраля 2015

Я использую Mono Android (Xamarin); Я показываю вам другую альтернативу, которая используется в моем приложении для создания диалога во фрагменте:

Dialog itemDialog = new Dialog(this.Activity);  
TextView alertTitle=(TextView)itemDialog.Window.DecorView.FindViewById(Android.Resource.Id.Title);

alertTitle.SetTextColor(Android.Graphics.Color.Blue);
alertTitle.SetBackgroundColor(Android.Graphics.Color.Orange);
itemDialog.SetContentView(Resource.Layout.listview_custom_dialog);
string[] options = new string[] { "Open", "Mark as Unread","Mute","View    
Profile","Block Connection","Delete Conversation" };
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity,  
Resource.Layout.listitem_custom_dialog,Resource.Id.textViewDialogDescription,   
options);

Resource.Layout.listitem_custom_dialog: это пользовательский макет просмотра списка, вот XML-файл:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
<TextView
    android:id="@+id/textViewDialogDescription"
    android:layout_width="match_parent"
    android:layout_height="44dp"
    android:background="#ffffff"
    android:textColor="#386B96"
    android:paddingLeft="4dp"
    android:textSize="14dp" />
</RelativeLayout>

ListView lv = itemDialog.FindViewById<ListView> 
(Resource.Id.listViewDialogItems);
lv.Adapter = adapter;
adapter.NotifyDataSetChanged();
itemDialog.SetCancelable(true);
itemDialog.SetTitle("Conversation");
itemDialog.Show(); 

Android.Resource.Id.Title : это идентификатор текстового представления, содержащего заголовок диалога. и это предопределено Android. таким образом, вы получите диалог, который вы можете стилизовать так, как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...