2012-02-15 4 views
2

Я пришел из объектива-c, и я новичок в Android. Я использую следующий метод, который намеревается изменить tabColor для индекса 0. Но я бы хотел изменить по умолчанию серая вкладка при ее выборе. Спасибо.android change selected tab background color

mTabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.CYAN); 
+0

Вы пытаетесь изменить его, когда он выбран, а затем включите его когда он становится не выбранным? – FoamyGuy

+0

да, это так, как сейчас – Jaume

ответ

5

Использование setOnTabChangedListener (TabHost.OnTabChangeListener л) на TabHost:

myTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){ 
    @Override 
    public void onTabChanged(String tabId) { 
    int tab = myTabHost.getCurrentTab(); 
    myTabHost.getTabWidget().getChildAt(tab).setBackgroundColor(Color.CYAN); 
    } 
}); 

Может быть, есть более простой способ, я не имею использовать его раньше;)

+0

, все еще имея тот же цвет фона по умолчанию, пока не будет нажата вкладка. Затем он остается всегда голубым. Я установил случай переключения, чтобы контролировать, какой из них нажат, чтобы вернуться к цвету по умолчанию и работает, но когда приложение запускается, все еще серый и первый щелчок по умолчанию желтый, когда он нажимается :( – Jaume

+0

для (int i = 0; i Jaume

2

Android позволяет для StateList drawable xml file, который предназначен для получения эффекта, которым вы пользуетесь.

read about it here

Идея заключается вы делаете файл XML, который объявляет другой рисуем (или цвет, если вы хотите, простые цвета) для каждого состояния. Затем, когда вы применяете этот элемент в качестве фона вашего представления, он будет обрабатывать «волшебство» переключения вашего изображения изображения для вас, так что вам не придется беспокоиться о том, чтобы делать это вручную из java-кода.

так что ваш фрагмент кода будет выглядеть примерно так:

myTabHost.getTabWidget().getChildAt(tab).setBackgroundResource(R.drawable.your_state_list_filename); 

Вот пример списка файлов состояния, которые я использовал на кнопке. Вы можете скопировать это в xml-файл в свою папку drawables, а затем изменить его, чтобы использовать любые состояния и изображения, которые вы хотите.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
     android:drawable="@drawable/darkblue1" /> <!-- pressed --> 
<item android:state_focused="true" 
     android:drawable="@drawable/darkblue1" /> <!-- focused --> 
<item android:drawable="@drawable/lightblue1" /> <!-- default --> 
</selector> 

Я думаю (но не уверен), что использовать цвета вместо вводимого коэффициента вы бы просто изменить "@drawable/blahblah" к "#FF121212", где первые две цифры являются альфа, а следующий 6 являются шестнадцатеричное значение для цвета вы хотите ,

+0

Спасибо Тим, android: color = # "F121212". Но xml имеет статический контент, мне нужно установить его в действие – Jaume

+0

I ' вы никогда не делали этого раньше, но вы также сможете динамически создавать его динамически. См. документы здесь: http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html – FoamyGuy

0

Я просто изменил разметку TabHost

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
     android:background="@android:color/transparent"> 
0

Я использовал этот, чтобы решить мою проблему:

tabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      tabs.setSelectedIndicatorColors(Color.RED); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    });