2015-06-22 2 views
12

Я использую новую поддержку TabLayout от Android. Дело в том, что я хотел использовать селекторы для изменения значка при выборе вкладки.Как использовать селекторы для изменения значков с новым TabLayout

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

Кто-нибудь знает обходное решение?

Спасибо!

+0

как у решить ур проблемы, потому что шахта не получает решить с customView – Erum

ответ

1

Есть способ установить customView как вкладку с помощью метода setCustomView(View view). Таким образом, вы можете создать текстовое представление и установить для него селектор и настроить это представление на вкладку.

Надеюсь, это поможет вам!

0

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

Я нашел обходное решение (это называется Gambiarra в хороших португальцах), чтобы решить эту проблему. вам нужно вызвать метод выбора() из класса Tab, как это:

mTabLayout.getTabAt(x).select(); 

НО это очень важно: х переменная должна отличаться от текущего индекса выбран табл.

43

Пусть ваш my_selector.xml есть

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/icon_on" android:state_selected="true"/> 
    <item android:drawable="@drawable/icon_off"/> <!-- default --> 
</selector> 

, то вы можете позвонить SetIcon непосредственно,

tab.setIcon(R.drawable.my_selector); 

проверена с 'com.android.support:design:22.2.0'.

+4

Это должно быть принято отвечать .. – FingerSmith

+0

Это отлично работает, но я столкнулся с причудой. Первая вкладка не выбрана. Это только я? Я попытался вручную настроить пейджер на 0 ('pager.setCurrentItem (0);') – iroyo

+0

setIcon метод не может быть разрешен – kgandroid

1

Я обнаружил, что, когда я впервые установил пользовательский вид для каждой вкладки в TabLayout, мне нужно установить первый (индекс 0) как выбранный.

TabLayout toolbarTabLayout = (TabLayout) findViewById(R.id.tabs); 
    toolbarTabLayout.setupWithViewPager(mViewPager); 
    toolbarTabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    toolbarTabLayout.setTabMode(TabLayout.MODE_FIXED); 
    toolbarTabLayout.setTabTextColors(R.color.colorPrimary, R.color.white); 
    // Iterate over all tabs and set the custom view 
    for (int i = 0; i < toolbarTabLayout.getTabCount(); i++) { 
     TabLayout.Tab tab = toolbarTabLayout.getTabAt(i); 
     View v=mSectionsPagerAdapter.getTabView(i); 
     // no tabs are actually selected at start, this will make sure the 
     // selector for the colors comes in right when initialized 
     if (i==0) 
      v.setSelected(true); 
     tab.setCustomView(v); 
    } 

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

0

Это то, что работает для меня:

Если у вас есть ваши селекторы установлены в папке вытяжки Реза (как Xingang Huang показаны выше). В вашем MainActivity (где вы настроите ваш TabLayout) вы включите ваш массив значок селекторов, а затем вы цикл через него, как это:

for (int i = 0; i < yourTabLayout.getTabCount(); i++) { 
     ImageView imageView = new ImageView(this); //your context, in this case MainActivity.class 
     imageView.setImageResource(arr_tabIcons[i]); //tabIcons is the array of icons 
     if (i==0) { 
      imageView.setSelected(true); 
     } 
     yourTabLayout.getTabAt(i).setCustomView(imageView); 

    } 

tab.setIcon (R.drawable.icon)

работает, но в моем случае значки выглядели очень маленькими, поэтому мне пришлось использовать решение с ImageView для заполнения вида вкладки.

Счастливый кодирования;)