18

Android の新しいサポート TabLayout を使用しています。問題は、タブが選択されたときにセレクターを使用してアイコンを変更したかったことです。

私はソースコードを調べてきましたが、ビューの状態を決して変更しないようです (そのため、セレクターを使用できません)。

誰かがいくつかの回避策を知っていますか?

ありがとうございました!

4

5 に答える 5

59

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」で検証済み。

于 2015-08-12T04:05:57.197 に答える
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);
    }

これにより、カスタム ビューが適用されたときに、最初のタブが強制的に選択されるようです。それは本当にハックのように感じます。他の誰かが本当の問題を理解し、より良い修正を提案してくれることを願っています。

于 2015-11-11T02:24:20.977 に答える
0

setCustomView(View view)メソッドで customView をタブとして設定する方法があります。したがって、テキストビューを作成してセレクターを設定し、このビューをタブに設定できます。

それがあなたを助けることを願っています!

于 2015-06-24T06:42:33.743 に答える