2013-09-01 2 views
12

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

Вот что я пытаюсь сделать (пример использует тему в Dialogs documentation. Это просто пример того, что я действительно пытаюсь использовать, это тема приложения).

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> 

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

Любая идея?

+0

Цвет прост. Установите цвет текста на предоставленный синий цвет Холо. – ChiefTwoPencils

+0

Спасибо, но я хочу, чтобы мой заголовок имел тему по умолчанию для диалогов. Если тема приложения не Holo, это не работает. –

ответ

10

Смотрите, если это то, что вы ищете:

<?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. Посмотрите на представление с идентификатором 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> 
+0

Большое спасибо за ваши исследования, но я не ищу, какой цвет является заголовком в теме Голо. Я пытаюсь создать общий виджет, который адаптируется к текущей теме приложения. Тем не менее, глядя на исходный код Android, мне кажется очень хорошей идеей. Я буду исследовать. –

+3

@ Jean-MarcAstesana Извините, если бы я дал вам впечатление «посмотрите, я нашел нужный вам цвет». Я думал, что говорю тебе, где искать. Например, если вы посмотрите на 'dialog_title_holo.xml' (который является файлом макета), вы получите некоторые указания относительно того, как андроид достигает представления, которое вы видите в диалоговом окне по умолчанию. «Синяя линия» определяется точно так же, как указано выше, за исключением того, что свойство 'android: background =" # ff33b5e5 "' is android: background = "@ android: color/holo_blue_light" '. – Vikram

+0

@ user255882 Хорошо, я думаю (надеюсь) Я понимаю. Я взглянул на Android-18, и все выглядит иначе. Итак, я понимаю, что нет идентификатора волшебного стиля для всего макета заголовка, который можно применить к компоненту title, чтобы приложение выглядело и ощущалось. Лучшее, что я могу сделать, это использовать стиль = "@ android: style/TextAppearance.DeviceDefault.DialogWindowTitle" для поля заголовка (на устройствах после API14 до того, как этот стиль не существует). Не так ли? –

0

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

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

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

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

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

вместо этого.

Смежные вопросы