Intereting Posts
Диалоговое окно или форму, где пользователь может выбрать ввод данных или отмену Как отобразить анимацию прогресса загрузки для некоторого изображения? Предпосылки создания Как узнать, работает ли служба с помощью оболочки adb в android OnBackStackChanged () вызывается дважды, когда новый фрагмент добавляется в backstack Mobile Vision barcodeScanner: Почему SurfaceView не обновляет CameraSource? Android – общие переходы элементов с завершением активности вызова () Ошибка инициализации карты Google v2 при использовании дополнительного механизма dex Наполните новый макет xml для каждого представления – instantiateItem в PagerAdapter Android WebView, похоже, игнорирует информацию о «видовом экране» на веб-страницах Android-программирование – проблемы с кучей Android facebook sdk v4.0 не работает Архетип maven для проекта Android Практическое руководство и понимание события перетаскивания и масштабирования с помощью GLSurfaceView Realm Android – Как преобразовать RealmResults в массив объектов?

Как изменить фон виджета вкладки Android?

Мой класс расширяет расширение TabActivity

TabHost mTabHost = getTabHost(); TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); tab1 .setIndicator("title tab1"); tab2 .setIndicator("title tab2"); mTabHost.addTab(tab1);mTabHost.addTab(tab2); TabHost.setCurrentTab(0 or 1) 

Может ли кто-нибудь указать мне, как изменить фоновое изображение или цвет выбранной вкладки?

Что делать, если вы регистрируетесь для событий TabHost.OnTabChanged и вызываете mTabHost.getCurrentTabView (), чтобы получить представление, а затем view.setBackgroundResource ()?

Это установит цвета вашей вкладки:

 public static void setTabColor(TabHost tabhost) { for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) { tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected } tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected } 

И если вы поместите его внутри onTabChangedListener (), он сохранит правильный цвет для выбранных вкладок.

Как упоминалось в mbaird, лучшим решением является использование фона с селектором, поэтому вам не нужно проверять onTabChanged и выполнять ручное обновление. Минимальный код здесь:

 private void initTabsAppearance(TabWidget tabWidget) { // Change background for(int i=0; i < tabWidget.getChildCount(); i++) tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg); } 

Где tab_bg – это xml, который можно использовать с селектором:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/tab_bg_selected" /> <item android:drawable="@drawable/tab_bg_normal" /> </selector> 

Для полной настройки табуляции я добавлю код для изменения стиля текста табуляции с помощью настраиваемой темы. Добавьте это в styles.xml :

 <resources> <style name="MyCustomTheme" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:tabWidgetStyle">@style/CustomTabWidget</item> </style> <style name="CustomTabWidget" parent="@android:style/Widget.TabWidget"> <item name="android:textAppearance">@style/CustomTabWidgetText</item> </style> <style name="CustomTabWidgetText" parent="@android:style/TextAppearance.Widget.TabWidget"> <item name="android:textSize">12sp</item> <item name="android:textStyle">bold</item> </style> </resources> 

Чтобы использовать эту тему, определите ее в AndroidManifest.xml:

 <application android:theme="@style/MyCustomTheme"> 

И теперь у вас есть виджеты вкладок с настраиваемым фоном и пользовательским стилем текста .

Помогает ли это решить вашу проблему? В основном вызов setBackgroundDrawable в каждом представлении вкладки с помощью селектора?

 > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); 

Используйте .setBackgroundResource и tabNselector – это XML- tabNselector.xml

  <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="false" android:drawable="@drawable/tabN"/> <item android:state_selected="true" android:drawable="@drawable/tabNsel" /> </selector> 

Я установил параметр «android: background» в элементе TabWidget XML, чтобы получить общий фон всех вкладок.

Затем я передал представления, завышенные от другого XML в методе «.setIndicator».

  View v = LayoutInflater.from(this).inflate(R.layout.tab_widget, null); TextView label = (TextView) v.findViewById(R.id.tabLabel); label.setText("Whatever"); tab1 .setContent(v); 

Я считаю, что это лучший способ сделать это.