Изменить цвет линии, используемый в listSeparatorTextViewStyle

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

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

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

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

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

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

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

ошибка: ошибка: ресурс не является общедоступным. (в '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, который должен жить где-то на вашем собственном компьютере! Но я сделаю это легко и просто закажу это:

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

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

Нам нужно переопределить это. Я уверен, что есть несколько способов сделать это, но я делаю это, настраивая тему приложения. Вот файл 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 из того предыдущего поста ТАК? И родительский стиль является Widget.TextView.ListSeparator из источника в стиле Android? Все очень важно.

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

Надеюсь, что это работает и полезно!

Другие вопросы по тегам