2015-07-26 10 views
58

To jest mój kod w głównej działalnościJak zmienić kolor tła karty podczas korzystania z 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); 



    } 
} 

I to jest mój kod w pliku 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> 

Chcę zmienić kolor tła jednej karcie, gdy jest wybrany

Odpowiedz

156

Co ostatecznie pracował dla mnie jest podobny do tego, co @ 如果 我 是 DJ zasugerował, ale tabBackground powinny być w pliku layout i nie wewnątrz style, więc wygląda na to:

res/layout/somefile.xml:

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

i selektor 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

dziękuję, że oszczędzasz mój czas. Twoja odpowiedź Pracuj dla mnie. –

+1

Możesz również dodać wartość koloru do tego atrybutu: np: app: tabBackground: @ color/colorAccent –

+0

Dziękujemy za rozwiązanie. Jednak utraciłem domyślny efekt marszczenia. –

1

Have próbowałeś sprawdzić API?

Musisz utworzyć detektor dla zdarzenia OnTabSelectedListener, a kiedy użytkownik wybierze dowolną kartę, sprawdź, czy jest ona poprawna, a następnie zmień kolor tła za pomocą tabLayout.setBackgroundColor(int color) lub jeśli nie jest to właściwy znak tab na pewno ponownie powrócisz do normalnego koloru tą samą metodą.

+0

Tak, próbowałem, ale tabLayout zmienia kolor widget pełną kartę, a nie mogę znaleźć metodę na tabLayout.Tab że tylko zmienia kolor tab i inne karty pobytu w tym samym kolorze . –

+0

Nie jestem w 100% pewien, po co się znajdujesz. Jeśli chcesz tylko pokolorować treść jednej karty, możesz dodać kontener/widok wewnątrz tej zakładki, powinieneś móc ustawić kolor tła kontenera/widoku w XML jak normalnie, na przykład: ustawi tło na czerwony 'android: background = FF0000' – sorifiend

+0

Te inne pytania/odpowiedzi mogą pomóc: http://stackoverflow.com/questions/30904138/how-to-change-the-new-tablayout-indicator-color-and -wysokość i http://stackoverflow.com/a/30755351/1270000 – sorifiend

12

Można spróbować to:

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

W pliku xml background:

<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

i jak zaimplementować to? – TSR

7

Dodaj atribute w xml:

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

I utworzyć w folderze rozciągliwej, 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

Możesz mieć to w 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"/> 
Powiązane problemy