问题是如何更改单个TabLayout.Tab的文本颜色。理想情况下,我希望迭代选项卡并根据相应ViewPager片段中包含的信息更改其颜色。
答案 0 :(得分:1)
(这是一个Java答案;希望尽管您使用的是Xamarin,但它仍然有用。)
据我所知,假设您正在使用通过<TabItem>
标记创建的默认视图或调用setupWithViewPager(myPager)
,则无法使用公共API执行此操作。这些创建TabLayout.Tab
实例的方法会创建一个包私有TabView mView
字段(其本身具有private TextView mTextView
字段)。没有办法获得对这个TextView
的引用,所以没有办法做你想做的事。
...除非你愿意采取反思(这意味着这个解决方案可能随时破解)。然后你可以做这样的事情:
TabLayout tabs = findViewById(R.id.tabs);
try {
for (int i = 0; i < tabs.getTabCount(); i++) {
TabLayout.Tab tab = tabs.getTabAt(i);
Field viewField = TabLayout.Tab.class.getDeclaredField("mView");
viewField.setAccessible(true);
Object tabView = viewField.get(tab);
Field textViewField = tabView.getClass().getDeclaredField("mTextView");
textViewField.setAccessible(true);
TextView textView = (TextView) textViewField.get(tabView);
textView.setTextColor(/* your color here */);
}
}
catch (NoSuchFieldException e) {
// TODO
}
catch (IllegalAccessException e) {
// TODO
}
答案 1 :(得分:1)
最简单的方法是从指定的TextView
获取TabLayout.Tab
,然后使用TextView.SetTextColor(Color color)
设置文字颜色,您可以执行以下操作:
TabLayout tabLayout = new TabLayout(this);
int wantedTabIndex = 0;
TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.GetChildAt(0)).GetChildAt(wantedTabIndex)).GetChildAt(1));
var textColor = Color.Black;
tabTextView.SetTextColor(textColor);