2014-11-14 2 views
3

Я создал свою собственную тему для 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. Пожалуйста, помогите мне разобраться и решить эту проблему.

ответ

1

Просмотрите раздел документации для ActionBar Styling - он упоминает, что Note: The custom style applied to titleTextStyle should use TextAppearance.Holo.Widget.ActionBar.Title as the parent style. - возможно, изменения могут помочь в устранении проблемы.

Другое место для поиска будет here под секцией Example theme - это показывает пример android:actionBarTabTextStyle, который может помочь вам разобраться в деталях.

+0

Спасибо за ваш ответ. К сожалению, я уже видел обе ссылки, которые вы опубликовали, и они не помогли. ** Ad1. ** Это примечание о titletextstyle, а не tabtextstyle. Моя родительская иерархия для tabtextstyle в порядке. ** Ad2. ** В этом примере даже не используется селектор для цвета текста, и он использует определенную иерархию для поддержки устройств с помощью android <3.0. Я использую иерархию из этого [link] (https://developer.android.com/training/basics/actionbar/styling.html#CustomText), раздел «Только для Android 3.0 и выше». – whatever

+0

Чтобы быть уверенным, что ваш файл textcolor_selector находится в каталоге 'res/color /'? Как указано в вашем заявлении ' @ color/textcolor_selector' – Bret

+0

Не может быть никакого различия, но во всех примерах, которые я видел в документации по 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

Смежные вопросы