Изменение цвета линии, используемого в спискеSeparatorTextViewStyle

У меня есть следующий код

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

и я получу следующий эффект.

enter image description here

Однако я не доволен цветовой линией. Я хотел бы иметь что-то вроде

enter image description here

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

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

Но это не сработает, поскольку я получаю следующую ошибку.

Ошибка: Ошибка: ресурс не является общедоступным. (at 'android: background' со значением '@android: drawable/dark_header_dither').

Подумайте, как изменить цвет линии, используемый в listSeparatorTextViewStyle?

Ответ 1

Мне нужно было сделать это, чтобы переопределить типичный стиль Holo Spinner (я не хотел подчеркивать элемент - я просто хотел стрелку), и я думаю, что это можно переопределить точно так же:

Прежде всего, вы хотите найти элемент, который хотите переопределить в источнике стилей Android. Существует невероятно полезный ответ SO, который содержит все стили (и имена, чтобы переопределить их) прямо здесь: Установить тему диалога для родительской темы в Android

Я считаю, что ваша следующая строка:

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

Это приведет нас к путешествию, чтобы найти стиль Widget.Holo.Light.TextView.ListSeparator, который должен жить где-то на вашем собственном компьютере! Но я сделаю это легко и просто c & p it:

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

Теперь вы, вероятно, захотите оставить достаточно хорошо в одиночку, а просто посмотреть на этот фон. Вы увидите, что это серый 9patch файл, который выглядит как зловещая серая линия, которую вы пытаетесь избежать.

Нам нужно переопределить это. Я уверен, что есть несколько способов сделать это, но я делаю это, настраивая тему приложения. Вот файл 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>

Обратите внимание на то, как мы использовали listSeparatorTextViewStyle из предыдущего сообщения SO. А родителем пользовательского стиля является Widget.TextView.ListSeparator из источника стиля Android. Все очень важно.

Теперь вам просто нужно применить эту тему к своему приложению, но я предполагаю, что у вас уже есть тема. Если вы еще этого не сделали, вам нужно будет сделать свой собственный 9patch, но я просто посмотрю на файл list_section_divider_holo_light.9.png на вашем компьютере и сделаю серые части синими, а затем сделаю копию и поместит ее в свой собственный папка drawables.

Надеюсь, это сработает и поможет!