Я создал свою собственную тему для Android, чтобы изменить внешний вид вкладок панели действий. Проблема заключается в том, что селектор цветной печати, кажется, игнорирует атрибут state_pressed, поэтому цвет текста вкладки всегда один и тот же, даже если эта вкладка нажата. Нет проблем с другими состояниями, например, state_selected правильно распознан, а выбранная вкладка имеет цвет текста, который отличается от цвета текста невыбранных вкладок.
Более того, я также создал селектор для фона вкладок, и он отлично работает с state_pressed (если нажата вкладка, меняется цвет фона).Android tabs textcolor selector игнорирует state_pressed
Есть некоторые части моего кода:
styles.xml:
<style name="Theme.MyTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarTabStyle">@style/Theme.MyTheme.TabStyle</item>
<item name="android:actionBarTabTextStyle">@style/Theme.MyTheme.TabTextStyle</item>
</style>
...
<style name="Theme.MyTheme.TabStyle"
parent="@android:style/Widget.Holo.Light.ActionBar.TabView">
<item name="android:background">@drawable/background_selector</item>
</style>
<style name="Theme.MyTheme.TabTextStyle"
parent="@android:style/Widget.Holo.Light.ActionBar.TabText">
<item name="android:textColor">@color/textcolor_selector</item>
</style>
background_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false">
<shape>
<solid android:color="#00ff00"/>
</shape>
</item>
<item android:state_selected="false" android:state_pressed="true">
<shape>
<solid android:color="#0000ff"/>
</shape>
</item>
<item android:state_selected="true" android:state_pressed="false">
<shape>
<solid android:color="#ff0000"/>
</shape>
</item>
<item android:state_selected="true" android:state_pressed="true">
<shape>
<solid android:color="#ffff00"/>
</shape>
</item>
</selector>
textcolor_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:state_pressed="false"
android:color="#ff0000"/>
<item android:state_selected="true" android:state_pressed="true"
android:color="#0000ff"/>
<item android:state_selected="false" android:state_pressed="false"
android:color="#ffff00"/>
<item android:state_selected="false" android:state_pressed="true"
android:color="#00ff00"/>
</selector>
У меня есть пробовал каждый без успеха - атрибут state_pressed, кажется, игнорируется, но только в textcolor_selector. Пожалуйста, помогите мне разобраться и решить эту проблему.
Спасибо за ваш ответ. К сожалению, я уже видел обе ссылки, которые вы опубликовали, и они не помогли. ** Ad1. ** Это примечание о titletextstyle, а не tabtextstyle. Моя родительская иерархия для tabtextstyle в порядке. ** Ad2. ** В этом примере даже не используется селектор для цвета текста, и он использует определенную иерархию для поддержки устройств с помощью android <3.0. Я использую иерархию из этого [link] (https://developer.android.com/training/basics/actionbar/styling.html#CustomText), раздел «Только для Android 3.0 и выше». – whatever
Чтобы быть уверенным, что ваш файл textcolor_selector находится в каталоге 'res/color /'? Как указано в вашем заявлении '- @ color/textcolor_selector
' –
Bret
Не может быть никакого различия, но во всех примерах, которые я видел в документации по Android, state_pressed [используется сначала ] (http://developer.android.com/reference/android/content/res/ColorStateList.html) перед другими вариантами и указан первым [здесь] (http://developer.android.com/guide/topics/resources /color-list-resource.html) также --- попробуйте изменить порядок 'состояний' в вашем файле textcolor_selector, поставив' state_pressed' перед 'state_selected' для каждого'- ' –
Bret