TabLayout의 Tab에 다른 Indicator 색상을 설정하고 싶습니다.
14845 단어 Android
2015/8/27 추기
하고 싶은 일
문제.
TabLayout의 표시기 색상 설정 방법
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="@color/hoge_color" />
해결책
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
mTabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.blue));
break;
case 1:
mTabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.red));
break;
case 2:
mTabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.green));
break;
default:
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
소스 코드의 제한 사항
TabLayout.class
public TabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
//----略-----
this.mTabStrip = new TabLayout.SlidingTabStrip(context);
this.mTabStrip.setSelectedIndicatorColor(a.getColor(styleable.TabLayout_tabIndicatorColor, 0));
//----略-----
해결
초경성
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == 0) {
changeTabIndicatorColor(getResources().getColor(R.color.transaction_out_color));
} else if (tab.getPosition() == 1) {
changeTabIndicatorColor(getResources().getColor(R.color.transaction_in_color));
} else if (tab.getPosition() == 2) {
changeTabIndicatorColor(getResources().getColor(R.color.transaction_ex_color));
}
viewPager.setCurrentItem(tab.getPosition(), false); // タブ内のページも切り替えないといけない。
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
private void changeTabIndicatorColor(int colorIdInHex) {
try {
Field field = TabLayout.class.getDeclaredField("mTabStrip");
field.setAccessible(true);
Object ob = field.get(mTabLayout);
Class<?> c = Class.forName("android.support.design.widget.TabLayout$SlidingTabStrip");
Method method = c.getDeclaredMethod("setSelectedIndicatorColor", int.class);
method.setAccessible(true);
method.invoke(ob, colorIdInHex);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
인용하다
Reference
이 문제에 관하여(TabLayout의 Tab에 다른 Indicator 색상을 설정하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ken5scal/items/eaed681c3d086ab49351텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)