我一直在阅读Stack以尝试更改指示器的颜色(选项卡的下划线,告诉您选择了哪个选项卡),但我使用的代码here,但它不会工作。我得到2个错误:
在view.findViewById(R.id.tabhost)
中,视图和tabhost为红色(无法解析符号)。
一个是widget.getChildCount()
,它说方法调用可能会产生空指针异常。
第三个错误是在v.setBackgroundResource(R.drawable.tab_selector_color);
它说的相同,它可能会产生一个空指针异常。
我下载了所有的drawable并改变了它们的颜色,就像上面的链接一样,然后我将它们全部放在我的drawable-mdpi文件夹中,就像它建议的那样。
我将发布我的主要活动的一部分,其中包含错误的代码块,以及tab_selector_color.xml
,它位于我的drawable文件夹中(我认为它必须放在这里,而不是布局文件夹,因为它有selector
个标签。)
如何解决这些错误?在此先感谢,如果有任何不清楚的地方或者您需要查看更多文件,请告诉我。
包含主要活动错误的方法:
(我拿了下面的标题代码,因为我没有TextView
任何地方(使用我的指示器可绘制部分的图标),但无论代码是否存在,3个错误仍然存在)。
public void changeTabIndicators() {
FragmentTabHost host = (FragmentTabHost)view.findViewById(R.id.tabhost);
TabWidget widget = host.getTabWidget();
for(int i = 0; i < widget.getChildCount(); i++) {
View v = widget.getChildAt(i);
// // Look for the title view to ensure this is an indicator and not a divider.
// TextView tv = (TextView)v.findViewById(android.R.id.title);
// if(tv == null) {
// continue;
// }
v.setBackgroundResource(R.drawable.tab_selector_color);
}
}
tab_selector_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false"
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/tab_unselected_holo" />
<item android:state_focused="false"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/tab_selected_holo" />
<!-- Focused states -->
<item android:state_focused="true"
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/tab_unselected_focused_holo" />
<item android:state_focused="true"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/tab_selected_focused_holo" />
<!-- Pressed -->
<!-- Non focused states -->
<item android:state_focused="false"
android:state_selected="false"
android:state_pressed="true"
android:drawable="@drawable/tab_unselected_pressed_holo" />
<item android:state_focused="false"
android:state_selected="true"
android:state_pressed="true"
android:drawable="@drawable/tab_selected_pressed_holo" />
<!-- Focused states -->
<item android:state_focused="true"
android:state_selected="false"
android:state_pressed="true"
android:drawable="@drawable/tab_unselected_pressed_holo" />
<item android:state_focused="true"
android:state_selected="true"
android:state_pressed="true"
android:drawable="@drawable/tab_selected_pressed_holo" />
</selector>
答案 0 :(得分:0)
实际上黄色警告(#2和3上的错误)不会导致问题,但我所做的更改是.getChildCount()
方法。我在TabWidget Android pages查找了一下,但在那里找不到这个方法,所以我使用getTabCount()
代替。要修复view
中单词view.findViewById(R.id.tabhost)
中的错误,我删除了view.
并修复了该错误。
我还删除了TextView代码,因为我的标签不使用文本,而是使用小标签部分中的图标,所以我不需要整个方法(因为你可以看到它在我的代码中被注释掉了)
所以我想再次肯定,TabWidget current tab bottom line color主要适合我,即使从Github下载drawables需要永远,因为你必须下载整个父文件夹...但我做了,然后挑出我需要的,把它们放在正确的文件夹中,它工作了!另请注意,您必须将选项卡指示符xml(在答案中给出)放入drawable文件夹中,因为只要xml具有<selector>
标记,这就是惯例。