2012-08-29 10 views
10

Mam następujący kodzmienić kolor linii używany w listSeparatorTextViewStyle

 <TextView 
      android:text="@string/hello" 
      style="?android:attr/listSeparatorTextViewStyle" /> 

i będę się następujący efekt.

enter image description here

Jednak nie jestem zadowolony z linii kolorów. Chciałbym mieć coś takiego

enter image description here

chciałbym go mieć niebieską linię kolorów jak w hologramie. Próbuję następującego niestandardowego stylu.

<style name="MyOwnListSeperatorTextViewStyle">   
<item name="android:background">@android:drawable/list_section_divider_holo_light</item>   
<item name="android:textAllCaps">true</item>  

<!-- Copy from Widget.TextView.ListSeparator --> 

<item name="android:background">@android:drawable/dark_header_dither</item> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textColor">?textColorSecondary</item> 
    <item name="android:textSize">14sp</item> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:paddingLeft">8dip</item>   
</style> 

Ale to nie zadziała, ponieważ dostaję następujący błąd.

błąd: Błąd: zasób nie jest publiczny. (w "android: tło" z wartością "@android: drawable/dark_header_dither").

Masz pomysł, jak zmienić kolor linii używany w listSeparatorTextViewStyle?

+0

Czy próbowałeś wdrożyć moje rozwiązanie? Mam nadzieję, że to zadziałało! –

+0

Przepraszamy. Nie próbowałem jeszcze, ponieważ przez te kilka tygodni jestem zajęty innymi rzeczami. Zdecydowanie zaktualizuję ten wątek po wypróbowaniu. –

Odpowiedz

15

Musiałem to zrobić, aby zastąpić typowym stylu Holo Spinner (nie ma elementu podkreślony - Chciałem tylko strzałkę) i myślę, że można to zmienić w dokładnie taki sam sposób:

Po pierwsze, chcesz znaleźć element, który chcesz przesłonić w źródle stylów Androida. Jest to niezwykle przydatne SO odpowiedzieć, że zawiera wszystkie style (i nazwiskami ich nadpisać) tu: Set Dialog theme to parent Theme in Android

wierzę wasze jest następujący wiersz:

<item name="listSeparatorTextViewStyle">@android:style/Widget.Holo.Light.TextView.ListSeparator</item> 

Ten zabiera nas w podróż znaleźć styl Widget.Holo.Light.TextView.ListSeparator, który powinien żyć gdzieś na swoim własnym komputerze! Ale zrobię to łatwy i po prostu c & p to:

<style name="Widget.Holo.Light.TextView.ListSeparator" parent="Widget.TextView.ListSeparator"> 
    <item name="android:background">@android:drawable/list_section_divider_holo_light</item> 
</style> 

Teraz prawdopodobnie chcesz zostawić wystarczająco dobrze, a tylko spojrzenie na tym tle rozciągliwej. Przekonasz się, że jest to szary, 9-plikowy plik, który wygląda jak złowroga, szara linia, której chcesz unikać.

Musimy to zmienić. Jestem pewien, że jest na to kilka sposobów, ale robię to, dostosowując motyw aplikacji. Oto plik themes.xml:

<style name="AppTheme" parent="@android:style/Theme.Holo.Light.NoActionBar"> 
    <item name="android:listSeparatorTextViewStyle">@style/MyOwnListSeperatorTextViewStyle</item> 
</style> 

<style name="MyOwnListSeperatorTextViewStyle" parent="Widget.TextView.ListSeparator"> 
    <item name="android:background">@drawable/make_your_own_blue_9_patch_here</item> 
</style> 

Wskazówki jak użyliśmy listSeparatorTextViewStyle niż poprzednie SO pisać? A rodzicem stylu niestandardowego jest Widget.TextView.ListSeparator ze źródła w stylu androida? Wszystko bardzo ważne.

Teraz wystarczy zastosować ten motyw w swojej aplikacji, ale zakładam, że już masz motyw. Jeśli jeszcze tego nie zrobiłeś, musisz utworzyć własną 9-pakową, ale po prostu spojrzę na plik list_section_divider_holo_light.9.png na twoim komputerze i sprawię, że szare części będą niebieskie, a następnie zrobię kopię i umieścisz ją w twój własny folder ze szkicami.

Mam nadzieję, że to działa i jest pomocne!

+11

Otrzymuję następujący błąd: Błąd podczas pobierania elementu nadrzędnego dla elementu: Nie znaleziono zasobu pasującego do podanej nazwy '@android: style/Widget.TextView.ListSeparator'. \t styles.xml –

+0

Nie jestem pewien, czy to ma znaczenie, ale nie mam znaku "@" przed "androidem" podczas określania stylu macierzystego. –

+1

Cześć! Mam ten sam problem, ale kiedy wypróbowuję twoje rozwiązanie, a także wiele innych tutaj w SO, zmienia się całe okno TextView, zamiast tylko zmieniać linię. Jakieś pomysły, co robię źle? – acrespo