Android の新しいサポート TabLayout を使用しています。問題は、タブが選択されたときにセレクターを使用してアイコンを変更したかったことです。
私はソースコードを調べてきましたが、ビューの状態を決して変更しないようです (そのため、セレクターを使用できません)。
誰かがいくつかの回避策を知っていますか?
ありがとうございました!
Android の新しいサポート TabLayout を使用しています。問題は、タブが選択されたときにセレクターを使用してアイコンを変更したかったことです。
私はソースコードを調べてきましたが、ビューの状態を決して変更しないようです (そのため、セレクターを使用できません)。
誰かがいくつかの回避策を知っていますか?
ありがとうございました!
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」で検証済み。
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);
}
これにより、カスタム ビューが適用されたときに、最初のタブが強制的に選択されるようです。それは本当にハックのように感じます。他の誰かが本当の問題を理解し、より良い修正を提案してくれることを願っています。
setCustomView(View view)メソッドで customView をタブとして設定する方法があります。したがって、テキストビューを作成してセレクターを設定し、このビューをタブに設定できます。
それがあなたを助けることを願っています!