Intereting Posts
Пользовательский диалог отклоняется, когда я нажимаю на него Есть диаграмма зависимостей задачи построения диаграммы Android? Использование галактики Samsung 5 в качестве устройства в затмении WebViewClient возвращает «Не удалось установить безопасное соединение» при повторном создании фрагмента Как добавить динамическую кнопку под другое представление? Плотность и размеры в таблетках андроида Рябь на форме с прозрачным фоном Покрытие кода Jacoco по проекту с несколькими вкусами и модулями Как изменить вид списка Цвет текста Где разместить XML-файл, содержащий данные в приложении для Android Как имитировать спящий режим на эмуляторе Android Права на предоставление прав GMail API перед UserRecoverableAuthUIException IllegalArgumentException, вызванное requestLocationUpdate () Дизайн пользовательского интерфейса для арабских приложений поддержки на Android Как использовать шейдер для цветных линий, нарисованных с помощью GL_LINES и OpenGL ES 2.0

Используйте другой цвет для разных ActionBar.Tab

Я хочу, чтобы все вкладки в ActionBar имели разные индикаторы цвета, например синий для вкладки 1, красный для вкладки 2 и т. Д.

Для этого я создал разные селектора для всех цветов и поместил их в разные xmls в drawable. В style.xml я вызываю их

<style name="MyTheme" parent="AppBaseTheme"> <item name="android:actionBarTabStyle">@style/ActionBarTabStyleRed</item> </style> <style name="ActionBarTabStyleRed"> <item name="android:background">@drawable/tab_indicator_red</item> </style> 

Я создал этот стиль для разных цветов. Теперь, когда я изменяю drawable или стиль для другого цвета, он работает. Я могу видеть, что цвета применяются к вкладкам. Но так как все вкладки одного цвета, это не решило мою цель. Я попытался установить стиль вкладок в onTabSelected() но нет способа сделать это.

В конечном итоге я попытался создать разные темы для разных цветов и попытался установить их программно в onTabSelected() , но потом я узнал, что тема должна быть задана перед setContentView() .
Итак, мои вопросы … Как я могу это сделать? Есть ли способ иметь разные цвета для разных индикаторов вкладок ???

Обновить:-
Drawable / tab_indicator_red.xml

 <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="@android:color/transparent" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_red" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_red" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_red" /> <!-- Pressed --> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_red" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_red" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_red" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_red" /> </selector> 

Я думаю, у меня есть отправная точка для вас, но это немного странно. При настройке панели действий с помощью следующего кода вы можете настроить вкладки для пользовательского вида:

  //...somewhere in oncreate ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab tab1 = bar.newTab(); TextView tv1 = createTab("Tab 1", R.drawable.firsttabdrawable); tab1.setCustomView(tv1); tab1.setTabListener(this); ActionBar.Tab tab2 = bar.newTab(); tab2.setCustomView(createTab("Tab 2", R.drawable.secondTabDrawable)); tab2.setTabListener(this); ActionBar.Tab tab3 = bar.newTab(); tab3.setCustomView(createTab("Tab 3", R.drawable.thirdTabDrawable)); tab3.setTabListener(this); ActionBar.Tab tab4 = bar.newTab(); tab4.setCustomView(createTab("Tab 4", R.drawable.fourthTabDrawable)); tab4.setTabListener(this); bar.addTab(tab1); bar.addTab(tab2); bar.addTab(tab3); bar.addTab(tab4); 

CreateTab следующим образом:

  private TextView createTab(String titleText, int tabBackgroundDrawableId) { TextView tv = new TextView(this); //set caption and caption appearance tv.setTextAppearance(this, R.style.MyDefaultTabTextAppearance); tv.setText(titleText); //set appearance of tab tv.setBackgroundResource(tabBackgroundDrawableId); tv.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); //Make sure all tabs have the same height tv.setMaxLines(2); tv.setMinLines(2); return tv; } 

Однако, похоже, панель действий добавляет представление вкладки в родительское представление, которое добавляет дополнение для каждого из них, которое необходимо удалить. Я сделал это в oncreate после первого блока кода, например:

  View view = (View) tv1.getParent(); LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams)view.getLayoutParams(); view.setPadding(0, 0, 0, 0); view.setLayoutParams(lp); 

Вы можете найти более изящный / простой способ сделать это, но в качестве отправной точки я подумал, что это стоит публикации.

Надеюсь это поможет.

ДОБАВЛЕНО:

Также может быть полезно указать, что если у вас есть более сложный макет для вашей вкладки, вы можете раздуть XML-файл макета в методе createTab. Например, используя следующий xml (mytab.xml):

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tabIcon"/> <TextView style="@style/MyDefaultTabTextAppearance" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/tabIcon" android:minLines="2" android:maxLines="2" android:id="@+id/tabText"/> </RelativeLayout> 

CreateTab становится:

  private RelativeLayout createTab(String titleText, int tabBackgroundDrawableId) { RelativeLayout rl = (RelativeLayout)this.getLayoutInflater().inflate(R.layout.mytab, null, false); //set appearance of tab rl.setBackgroundResource(tabBackgroundDrawableId); TextView tv = (TextView)rl.findViewById(R.id.tabText); //set caption tv.setText(titleText); ImageView iv = (ImageView)rl.findViewById(R.id.tabIcon); iv.setImageResource(R.drawable.ic_launcher);//or supply unique drawable to method? return rl; }