2015-07-26 3 views
58

Это мой код в основной деятельностиКак изменить цвет фона вкладки при использовании TabLayout?

public class FilterActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_filter); 

    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager(), FilterActivity.this); 
    viewPager.setAdapter(pageAdapter); 

    // Give the TabLayout the ViewPager 
    final TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
    tabLayout.setupWithViewPager(viewPager); 



    } 
} 

И это мой код в XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <include 
     android:id="@+id/app_bar" 
     layout="@layout/app_bar"> 
    </include> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="fill_parent" 
     style="@style/MyCustomTabLayout" 
     android:layout_height="48dp"/> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" 
     android:background="@android:color/white" /> 

</LinearLayout> 

Я хочу изменить цвет фона одной вкладки, когда он выбран

ответ

156

Что, наконец, работал для меня похож на то, что @ 如果 我 是 DJ предложил, но tabBackground должен быть в файле layout и не внутри style, поэтому он выглядит так:

res/layout/somefile.xml:

<android.support.design.widget.TabLayout 
    .... 
    app:tabBackground="@drawable/tab_color_selector" 
    ... 
    /> 

и селектор res/drawable/tab_color_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/tab_background_selected" android:state_selected="true"/> 
    <item android:drawable="@color/tab_background_unselected"/> 
</selector> 
+0

благодарит вас за то, что вы сохранили мое время. Ваш ответ Работайте со мной. –

+1

Вы также можете добавить значение цвета к этому атрибуту: ie: app: tabBackground: @ color/colorAccent –

+0

Благодарим за решение. Тем не менее, я потерял по умолчанию эффект пульсации. –

1

Have вы пытались проверить API?

Необходимо создать прослушиватель для события OnTabSelectedListener, а затем, когда пользователь выбирает любую вкладку, вы должны проверить, является ли она правильной, а затем изменить цвет фона с помощью tabLayout.setBackgroundColor(int color), или если это неправильная вкладка, сделайте вернитесь к нормальному цвету снова с помощью того же метода.

+0

Да, я пытался, но tabLayout изменяет полный цвет вкладки виджета, и я не могу найти способ на tabLayout.Tab что только изменяет вкладку цвет и другие вкладки остаться с тем же цветом , –

+0

Я не уверен на 100%, что вы после. Если вы хотите только покрасить тело одной вкладки, вы можете добавить контейнер/представление внутри этой вкладки, тогда вы должны иметь возможность установить цвет фона контейнера/представления в XML, как обычно, например, следующее будет устанавливать фон to red 'android: background = FF0000' – sorifiend

+0

Эти другие вопросы/ответы могут вам помочь: http://stackoverflow.com/questions/30904138/how-to-change-the-new-tablayout-indicator-color-and -height и http://stackoverflow.com/a/30755351/1270000 – sorifiend

12

Вы можете попробовать это:

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> 
    <item name="tabBackground">@drawable/background</item> 
</style> 

В вашем фоне XML файла:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@color/white" /> 
    <item android:drawable="@color/black" /> 
</selector> 
+0

и как реализовать это? – TSR

7

Добавить atribute в XML:

<android.support.design.widget.TabLayout 
    .... 
    app:tabBackground="@drawable/tab_color_selector" 
    ... 
    /> 

И создать в вытяжке папку, tab_color_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/tab_background_selected" android:state_selected="true"/> 
    <item android:drawable="@color/tab_background_unselected"/> 
</selector> 
1

Вы можете получить его в xml.

<android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     app:tabTextColor="@color/colorGray" 
     app:tabSelectedTextColor="@color/colorWhite" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/>