2015-08-22 1 views
3

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

TextColor в настраиваемое представление должно быть белый когда вкладка выбран и темно-серым иначе. Я частично отработал: когда я вручную выбираю вкладку, цвет текста изменяется правильно.

Моя проблема заключается в том, что на первом экране текст первой вкладке , содержание которого отображается изначально и до какого-либо взаимодействия пользователя с вкладками, является не окрашиваются в активном состоянии цвета (белый). Его серый, как и неактивные вкладки. Если я начну взаимодействовать с вкладками, все будет работать, но исходный цвет вкладки первой отображаемой вкладки неверен.

[FIRST TAB | SECOND TAB] 
    ^
    Grey (inactive color) on first load 

EDIT: Причина, кажется, в styles.xml: если я открою свой стиль, который наследует от Widget.Design.TabLayout начальная окраска больше не работает. Если я не объявляю пользовательские стили для tablayout, все работает отлично!

EDIT2: Нет, это не сработало. Он работает без настройки пользовательского представления, но при первоначальной загрузке вкладок с настройкой пользовательского представления он по-прежнему не выполняет первоначальную раскраску.

Вот мой код:

tab_gallerylayout.xml (пользовательский вид вкладки)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
<com.mbprojects.retro.view.RetroTextView 
    android:id="@+id/tab_title" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:textColor="@drawable/gallerytab_title_color" 
    app:font="@string/font_name_syncopate" 
    /> 
</LinearLayout> 

gallerytab_title_color.xml (селектор)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:color="@android:color/white" /> 
    <item android:state_selected="false" android:color="@android:color/darker_gray" /> 
    <item android:state_focused="true" android:color="@android:color/white" /> 
    <item android:state_pressed="true" android:color="@android:color/white" /> 

    <item android:color="@android:color/darker_grey" /> 
</selector> 

styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style name="AppTheme" parent="@style/Theme.AppCompat.NoActionBar"> 
</style> 
<style name="AppTheme.Base.Widget.Design.TabLayout" parent="Widget.Design.TabLayout"> 
    <item name="tabMaxWidth">@dimen/tab_max_width</item> 
    <item name="tabIndicatorColor">@android:color/white</item> 
    <item name="tabIndicatorHeight">0dp</item> 
    <item name="tabPaddingStart">12dp</item> 
    <item name="tabPaddingEnd">12dp</item> 
    <item name="tabBackground">@android:color/black</item> 
    <item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item> 

</style> 

Любые предложения?

+0

Любопытно, если вы когда-либо находили решение этого. У меня такая ТОЧНАЯ проблема. При первоначальном запуске «выбранное» состояние окажется неправильным. Щелчок на вкладке и обратно на нее работает просто отлично. –

+0

Нет, к сожалению, нет. Я сдался, так как потребовалось слишком много времени. Я принимал расцветку по умолчанию при использовании пользовательского представления. Если вы найдете решение, сообщите мне об этом;) –

ответ

3

Причина этого необычного поведения заключается в том, что ваш viewPager устанавливает первый элемент как текущий внутри viewPager.setAdapter(). Это, в свою очередь, делает tabLayout для выбора первой вкладки в tabLayout.setupWithViewPager().

После этого, когда вы устанавливаете пользовательские вкладки, состояние пользовательского вида не изменяется на «selected» (потому что перед этим уже выполняется начальный код вкладки).

Итак, вам нужно объяснить, что пользовательский вид выбранной вкладки должен быть изменен. Добавьте строку ниже после того, как вы установили пользовательские вкладки, и вам хорошо идти.

mTabLayout.getTabAt(mInitialTab).getCustomView().setSelected(true); 
+0

Спасибо, к сожалению, моя настройка сильно изменилась за это время, поэтому я больше не могу это проверить. Думаю, я тоже пробовал это без успеха. Может ли кто-нибудь проверить, работает ли это? –

+0

У меня была такая же проблема, и это работает. Большое спасибо. – jeprubio

0

Вы должны использовать android:selector в своем xml вместо android:textColor. Первая предназначена для динамического изменения атрибута, в то время как последний присваивает одно значение и сохраняет его

+0

В моем случае атрибут «селектор» отсутствует. Пользовательский RetroTextView наследует от TextView, который, похоже, не имеет этого атрибута. –

+0

Извините, я тогда думал о чем-то другом. Просто подскажите, почему бы не создать образ с изображением, которое должно выглядеть как ваш RetroTextView и применить андроид: селектор attr. к чему вместо этого? – LonelyIdiot