S.T*_*ane 12 tabs android actionbarsherlock android-actionbar
如何以编程方式更改操作栏的选定选项卡指示器?我已经阅读了选项卡样式和Tab.setCustomView()方法,但这些都没有帮助:
使用选项卡样式,我可以更改指示器颜色,但它将保留所有选项卡(我希望每个选项卡都有一个指示器).
使用选项卡自定义视图,我使用了带有TextViewfor标签标题的布局,以及View用于管理指示器颜色.在java中我View动态地改变了它的背景,但问题是它View的背景与标签边界不匹配.
<TextView
android:id="@+id/custom_tab_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:gravity="center|center_horizontal"
android:textStyle="bold"/>
<View
android:id="@+id/custom_tab_view"
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_alignParentBottom="true"/>
Run Code Online (Sandbox Code Playgroud)
谁能告诉我哪里错了?还有另一种方法吗?谢谢
S.T*_*ane 17
通过使用@ Padma的答案生成我的标签指示器背景,我已经成功实现了我想要的东西:我需要5个选择器:绿色,黄色,蓝色,橙色和红色.所以我创建了5 xml drawables(tabs_selector_red.xml, tabs_selector_blue.xml, etc...):
tabs_selector_green.xml:
<!-- Non focused states -->
<item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs_green" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
<!-- Focused states -->
<item android:drawable="@android:color/transparent" android:state_focused="true" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs_green" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>
<!-- Pressed -->
<!-- Non focused states -->
<item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="true" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs_green" android:state_focused="false" android:state_pressed="true" android:state_selected="true"/>
<!-- Focused states -->
<item android:drawable="@android:color/transparent" android:state_focused="true" android:state_pressed="true" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs_green" android:state_focused="true" android:state_pressed="true" android:state_selected="true"/>
Run Code Online (Sandbox Code Playgroud)
我还layer-list为每个xml背景创建了一个:layer_bg_selected_tabs_green.xml
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/tab_green" />
<padding android:bottom="5dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<solid android:color="#FFFFFF" />
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
最后,在Javai 中,我使用选定的标签动态切换背景,custom view并且index:
private static final int[] TABS_BACKGROUND = {
R.drawable.tabs_selector_orange, R.drawable.tabs_selector_green,
R.drawable.tabs_selector_red, R.drawable.tabs_selector_blue,
R.drawable.tabs_selector_yellow };
/*
BLA BLA BLA
*/
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
RelativeLayout tabLayout = (RelativeLayout) tab.getCustomView();
tabLayout.setBackgroundResource(TABS_BACKGROUND[tab.getPosition()]);
tab.setCustomView(tabLayout);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
现在让我们添加一些截图:

//你的标签栏应该是
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Wrap"
android:background="@drawable/tabs_selector"
android:gravity="center_horizontal|bottom"
android:minHeight="@dimen/size_fourty"
>
<TextView
android:id="@+id/custom_tab_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:gravity="center|center_horizontal"
android:textStyle="bold"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
//你的tabs_selector.xml应该是这样的
<!-- Non focused states -->
<item android:drawable="@drawable/layer_bg_unselected_tabs" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
<!-- Focused states -->
<item android:drawable="@drawable/layer_bg_unselected_tabs" android:state_focused="true" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>
<!-- Pressed -->
<!-- Non focused states -->
<item android:drawable="@drawable/layer_bg_unselected_tabs" android:state_focused="false" android:state_pressed="true" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs" android:state_focused="false" android:state_pressed="true" android:state_selected="true"/>
<!-- Focused states -->
<item android:drawable="@drawable/layer_bg_unselected_tabs" android:state_focused="true" android:state_pressed="true" android:state_selected="false"/>
<item android:drawable="@drawable/layer_bg_selected_tabs" android:state_focused="true" android:state_pressed="true" android:state_selected="true"/>
Run Code Online (Sandbox Code Playgroud)
//你的layer_bg_unselected_tabs应该是这样的
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/red" />
<padding android:bottom="2dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/gray" />
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
//你的layer_bg_selected_tabs应该是这样的
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/red" />
<padding android:bottom="8dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/gray" />
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21850 次 |
| 最近记录: |