Можно ли программно изменить индикатор вкладки панели действий?
Как я могу программно изменить выбранный индикатор вкладок моей панели действий? я прочитал о стиле табуляции и методе Tab.setCustomView(), но ни одна из них не помогает:
-
С стилями вкладок я могу изменить цвет индикатора, но он останется для всех вкладок (я хочу иметь индикатор для каждой вкладки).
-
В пользовательском представлении табуляции я использовал макет с заголовком заголовка TextView
и 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"/>
Может кто-нибудь сказать мне, где я ошибаюсь? Есть ли другой способ сделать это? благодаря
Ответы
Ответ 1
Мне удалось реализовать то, что я хотел, используя ответ @Padma для создания фоновых индикаторов вкладок: мне нужны 5 селекторов: зеленый, желтый, синий, оранжевый и красный. Поэтому я создал 5 xml drawables
tabs_selector_red.xml, tabs_selector_blue.xml, etc...
(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"/>
Я также создал список 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>
И, наконец, в Java
я переключаю фон динамически, покупая с помощью выбранного 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);
/* ... */
}
Теперь добавим несколько скриншотов:
![green]()
![blue]()
![red]()
Ответ 2
//ваша панель вкладок должна быть
<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>
//ваш 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"/>
//ваш 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>
//ваш 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>