webentwicklung-frage-antwort-db.com.de

Wie ändere ich die Hintergrundfarbe eines Registers, wenn Sie TabLayout verwenden?

Dies ist mein Code in der Haupttätigkeit

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);



  }
}

Und das ist mein Code in der 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>

Ich möchte die Hintergrundfarbe einer Registerkarte ändern, wenn sie ausgewählt ist

87
Joel Lara

Was letztendlich für mich funktioniert hat, ähnelt dem, was @ 如果 我 是 DJ vorgeschlagen hat, aber die tabBackground sollte sich in der layout-Datei und nicht in der style befinden, also sieht es so aus:

res/layout/somefile.xml:

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

und der Selektorres/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>
227
Tako

Sie können dies versuchen:

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

In Ihrer XML-Hintergrunddatei:

<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>
19
如果我是DJ

Attribut in XML hinzufügen:

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

Und erstellen Sie im Zeichnungsordner die Registerkarte Farbe 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>
11
Hai Rom

Haben Sie versucht, die API zu überprüfen?

Sie müssen einen Listener für das OnTabSelectedListener -Ereignis erstellen. Wenn ein Benutzer eine Registerkarte auswählt, sollten Sie prüfen, ob es sich um die richtige Registerkarte handelt. Ändern Sie dann die Hintergrundfarbe mit tabLayout.setBackgroundColor(int color) oder geben Sie nicht die richtige Registerkarte ein Stellen Sie sicher, dass Sie mit derselben Methode wieder zur normalen Farbe wechseln.

3
sorifiend

Sie können es in der XML-Datei haben.

<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"/>
2
XurajB

Da ich die beste und passende Option für mich gefunden habe, wird es auch mit der Animation funktionieren.

Sie können indicator it als Hintergrund verwenden.

Sie können das Attributapp:tabIndicatorGravity="stretch"als Hintergrund festlegen.

Beispiel:

   <Android.support.design.widget.TabLayout
        Android:id="@+id/tab_layout"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:tabIndicatorGravity="stretch"
        app:tabSelectedTextColor="@color/white"
        app:tabTextColor="@color/colorAccent">

        <Android.support.design.widget.TabItem
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Chef" />


        <Android.support.design.widget.TabItem
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="User" />

    </Android.support.design.widget.TabLayout>

Hoffe es wird dir helfen.

0
Pratik Butani

Sie können die Hintergrundfarbe der Registerkarte mit diesem Attribut ändern

<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
style="@style/CategoryTab"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
'Android:background="@color/primary_color"/>'
0
Owais

Sie können den Hintergrund oder die Farbe der einzelnen Registerkarten wie folgt ändern:

    //set ripple color for each tab
    for(int n = 0; n < mTabLayout.getTabCount(); n++){

        View tab = ((ViewGroup)mTabLayout.getChildAt(0)).getChildAt(n);

        if(tab != null && tab.getBackground() instanceof RippleDrawable){
            RippleDrawable rippleDrawable = (RippleDrawable)tab.getBackground();
            if (rippleDrawable != null) {
                rippleDrawable.setColor(ColorStateList.valueOf(rippleColor));
            }
        }
    }
0
José Maurício