2013-09-01 8 views
12

Próbuję utworzyć niestandardowe okno dialogowe z alertem wielokrotnego wyboru, które pozwala użytkownikowi wybrać/odznaczyć wszystkie elementy jednym kliknięciem. Osiągam to, używając niestandardowego tytułu z dodatkowym polem wyboru. Wszystko działa dobrze, z tym wyjątkiem, że nie wiem jak sprawić, aby mój niestandardowy tytuł wyglądał jak domyślny tytuł okna dialogowego alertu (używając tego samego stylu).Android: Używanie domyślnego stylu w niestandardowym tytule okna dialogowego

Oto, co próbuję zrobić (w przykładzie użyto motywu w Dialogs documentation. To tylko przykład, co naprawdę próbuję mieć, to motyw aplikacji).

enter image description here

stworzyłem własny pogląd o tytuł niestandardowego używam, ale nie wiem jak zdobyć atrybuty pasku tytułowym domyślny styl, tak, to otrzymamy:

enter image description here

(Brak niebieski pasek poniżej tytułu, a niewłaściwy tytuł kolor)

Oto układ moim niestandardowym tytułem:

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

Wydaje mi się oczywiste, że muszę zdefiniować atrybuty tytułu i tło layoutu ... ale indeksuję sieć od godzin, szukając sposobu na uzyskanie atrybutów domyślnego widoku tytułu.

Każdy pomysł?

+0

Kolor jest łatwy. Ustaw kolor tekstu na podany kolor niebieski Holo. – ChiefTwoPencils

+0

Dziękuję, ale chcę, aby mój tytuł miał domyślny motyw aplikacji dla tytułów dialogowych. Jeśli motyw aplikacji nie jest Holo, to nie działa. –

Odpowiedz

10

Zobacz, czy to jest to, czego szukasz:

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

jak mam to:

przejdź do katalogu sdk na dysku twardym> Podnośniki> android-XX (17, na przykład)> data> res> layout> dialog_title_holo.xml. Spójrz na View with id titleDivider. Jest to atrybut tła: background="@android:color/holo_blue_light". Sprawdź wartość tego koloru w res/values/colors.xml.

Od styles_device_defaults.xml:

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

Patrząc na 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 jest taki sam jak kolor linii. Rozmiar tekstu jest określony jako 22sp. I style="?android:attr/textAppearanceLarge" nie jest wymagane, ponieważ jesteśmy ustawienie textSize="22sp":

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

Wielkie dzięki za badania, ale nie szukam, który kolor jest tytułem w motywie Holo. Próbuję utworzyć ogólny widget, który dostosowuje się do aktualnego tematu aplikacji. Niemniej jednak, patrząc na kod źródłowy Androida wydaje mi się bardzo dobrym pomysłem. Sprawdzę to. –

+3

@ Jean-MarcAstesana Przepraszam, jeśli sprawiłem Ci wrażenie "patrz, znalazłem kolor, którego szukasz". Myślałem, że mówię ci, gdzie szukać. Na przykład, jeśli spojrzysz na 'dialog_title_holo.xml' (który jest plikiem układu), otrzymasz wskazówki, jak Android osiąga widok, który widzisz w domyślnym oknie dialogowym. "Niebieska linia" jest zdefiniowana dokładnie tak jak powyżej, z tym wyjątkiem, że właściwość 'android: background =" # ff33b5e5 "' to 'android: background =" @ android: color/holo_blue_light "'. – Vikram

+0

@ user255882 Ok, myślę (mam nadzieję) Rozumiem. Spojrzałem na Androida-18 i wygląda na to, że jest inaczej. Rozumiem, że nie ma magicznego stylu dla całego układu tytułu, który można zastosować do komponentu tytułowego, aby wyglądał i działał w aplikacji. Najlepsze co mogę zrobić, to użyć style = "@ android: style/TextAppearance.DeviceDefault.DialogWindowTitle" dla pola tytułu (na urządzeniach po API14, zanim ten styl nie istnieje). Czyż nie? –

0

Jeśli chcesz po prostu użyć domyślnego urządzenia, bez konieczności dostosowywania lub przedłużyć niczego, można po prostu dodać:

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

do widoku tytułu w twoim układzie xml. Spowoduje to wyświetlenie innego stylu na podstawie motywu urządzeń.

Jeśli zawsze chcesz pokazać niebieski (Holo Theme) tytuł, niezależnie od wartości domyślne urządzenie, a następnie można dodać:

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

zamiast.

Powiązane problemy