Android: использование стиля по умолчанию в пользовательском диалоговом заголовке

Я пытаюсь создать настраиваемое диалоговое окно предупреждения о множественном выборе, которое позволяет пользователю выбирать/отменить выбор всех элементов за один клик. Я достигаю этого, используя пользовательский заголовок с дополнительным флажком. Все работает отлично, за исключением того, что я не знаю, как сделать свое пользовательское название похожим на заголовок диалогового окна предупреждения по умолчанию (используя тот же стиль).

Вот что я пытаюсь сделать (пример использует тему в Диалоговая документация. Это всего лишь пример, что я действительно попробуйте иметь тему приложения).

enter image description here

Я создал собственное представление для пользовательского заголовка, который я использую, но я не знаю, как получить атрибуты строки заголовка стиля по умолчанию, поэтому я получаю:

enter image description here

(Нет синей полосы ниже заголовка и неправильного цвета заголовка)

Вот макет моего пользовательского названия:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/title"
    style="?android:attr/textAppearanceLarge"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Dialog title" />

<TextView
    android:id="@+id/all"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="All" />

<CheckBox
    android:id="@+id/checkBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

Мне кажется очевидным, что мне нужно определить атрибуты заголовка и фон макета... но я просматриваю веб-страницы с тех пор, как я узнал, как получить атрибуты заголовка по умолчанию.

Любая идея?

Ответ 1

Посмотрите, что именно вы ищете:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="22sp"
            android:textColor="#ff33b5e5"
            android:text="Dialog title" />

        <TextView
            android:id="@+id/all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="All" />

        <CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <View android:id="@+id/titleDivider"
        android:layout_width="match_parent"
        android:layout_height="2dip"
        android:background="#ff33b5e5" />

</LinearLayout>

Как я получил это:

Перейдите в каталог sdk на вашем жестком диске > платформы > android-XX (например, 17) > data > res > layout > dialog_title_holo.xml. Посмотрите на представление с id titleDivider. Это фоновый атрибут: background="@android:color/holo_blue_light". Посмотрите на значение этого цвета в res/values/colors.xml.

От styles_device_defaults.xml:

<style name="TextAppearance.DeviceDefault.DialogWindowTitle" parent="TextAppearance.Holo.DialogWindowTitle" >

Глядя на styles.xml:

<style name="TextAppearance.Holo.DialogWindowTitle">
    <item name="android:textSize">22sp</item>
    <item name="android:textColor">@android:color/holo_blue_light</item>
</style>

textColor совпадает с цветом линии. Размер текста указан как 22sp. И style="?android:attr/textAppearanceLarge" не требуется, потому что мы устанавливаем textSize="22sp":

<style name="TextAppearance.Large">
    <item name="android:textSize">22sp</item>
</style>

Ответ 2

Если вы просто хотите использовать устройство по умолчанию, без необходимости настраивать или расширять что-либо, вы можете просто добавить:

android:textAppearance="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle"

в виде заголовка в макете xml. Это покажет другой стиль, основанный на теме устройств.

Если вы ВСЕГДА хотите показать синюю (голографическую тему), независимо от настроек устройства по умолчанию, вы можете добавить:

android:textAppearance="@android:style/TextAppearance.Holo.DialogWindowTitle"

вместо.