TabLayout kullanırken sekme arka plan rengini nasıl değiştiririm?


119

Bu, ana aktivitedeki kodum

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



  }
}

Ve bu XML'deki kodum

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

Seçildiğinde bir sekmenin arka plan rengini değiştirmek istiyorum

Yanıtlar:


285

Ne nihayet benim için çalıştı @如果我是DJ önerilen ne benzer, fakat tabBackgroundolmalıdır layoutdosyası ve değilstylebenzediğini böylece:

res/layout/somefile.xml:

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

ve seçici 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>

2
Ayrıca bu özelliğe bir renk değeri de ekleyebilirsiniz: ör: app: tabBackground: @ color / colorAccent
Val Martinez

Çözüm için teşekkürler. Ancak bununla birlikte varsayılan dalgalanma etkisini kaybettim.
Ken Ratanachai S.

4
Bunu programlı olarak nasıl yapabilirim?
TSR

1
@TSR, her sekme için farklı renklere ihtiyacınız yoksa yapabilirsiniz tabLayout.setBackgroundColor(colorInt). Her sekme için buna ihtiyacınız varsa, çocukları TabLayout'tan çıkartabilirsiniz
karl

1
görünüşü ve hissi iyileştirmek için ayrıca state_pressed : <item android:
Think Twice Code Once

21

Bunu deneyebilirsiniz:

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

Arka plan xml dosyanızda:

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

ve bunu nasıl uygulayabilirim?
TSR

13

Xml olarak atribute ekleyin:

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

Ve tab_color_selector.xml adlı çekilebilir klasörde oluşturun

<?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>

5

API'yi kontrol etmeyi denediniz mi?

OnTabSelectedListenerEtkinlik için bir dinleyici oluşturmanız gerekecek , daha sonra bir kullanıcı herhangi bir sekmeyi seçtiğinde, bunun doğru olup olmadığını kontrol etmeli, ardından kullanarak arka plan rengini değiştirmeli tabLayout.setBackgroundColor(int color)veya doğru sekme değilse, aynı yöntemle tekrar normal renk.


Evet, bunu denedim ama tabLayout tam sekme widget rengini değiştiriyor ve tabLayout.Tab'da sadece sekme rengini değiştiren ve diğer sekmeler aynı renkte kalan bir yöntem bulamıyorum.
Joel Lara

Neyin peşinde olduğundan% 100 emin değilim. Yalnızca bir sekmenin gövdesini renklendirmek istiyorsanız, o sekmenin içine bir kap / görünüm ekleyebilirsiniz, o zaman XML'deki kap / görünüm arka plan rengini normal gibi ayarlayabilmelisiniz, örneğin aşağıdaki arka planı ayarlayacaktır to redandroid:background=FF0000
sorifiend

Bu diğer sorular / cevaplar size yardımcı olabilir: stackoverflow.com/questions/30904138/… ve stackoverflow.com/a/30755351/1270000
sorifiend

3

Bunu xml'de alabilirsiniz.

<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

Benim için en iyi ve uygun seçeneği bulduğum için animasyonla da çalışacak.

indicatorKendini arka plan olarak kullanabilirsiniz .

app:tabIndicatorGravity="stretch"Özniteliği arka plan olarak kullanmak için ayarlayabilirsiniz .

Misal:

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

Umarım size yardımcı olur.


Bu, vurgu rengini otomatik olarak alıyor. Vurgu rengini değiştirmeden ona farklı renk nasıl verilir. teşekkürler
MindRoasterMir

1
app:tabIndicatorColor@MindRoasterMir
Pratik

1

Her Sekmenin arka planını veya dalgalanma rengini şu şekilde değiştirebilirsiniz:

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

1

Biraz uğraştıktan sonra, istenen görünümü (en azından öykünücüde) nasıl elde ettim ve dalgalanma etkisini koruyor.

renk bağımsız değişkenli sekme seçicili sekme düzeni

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabBackground="@drawable/tab_selector"
    app:tabIconTint="@drawable/tab_selector"
    app:tabIconTintMode="src_atop"
    app:tabTextColor="@drawable/tab_selector" />

Ve @drawable/tab_selector:

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

Bilginize: Bu, colorargümanı eklemeden önce öykünücünün gösterdiği şeydir @drawable/tab_selector:

renk bağımsız değişkeni olmayan sekme seçicili sekme düzeni


0

Bu özellik ile sekmenin arka plan rengini değiştirebilirsiniz

<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

Bulabildiğim yollardan biri sekme göstergesini şu şekilde kullanmak:

<com.google.android.material.tabs.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabBackground="@color/normal_unselected_color"
    app:tabIndicatorColor="@color/selected_color"
    app:tabIndicatorGravity="center"
    app:tabIndicatorHeight="150dp"
    app:tabSelectedTextColor="@color/selected_text_color"
    app:tabTextColor="@color/unselected_text_color">

    ..... tab items here .....

</com.google.android.material.tabs.TabLayout>

İşin püf noktası:

  • Sekme göstergesinin ortaya hizalanmasını sağlayın
  • Gösterge yüksekliğini, tüm tırnağı kaplayacak kadar büyük yapın

Bu aynı zamanda sekmeler arasında geçiş yaparken sorunsuz animasyonla ilgilenir


-2

En basit çözümlerden biri colorPrimary'yi colours.xml dosyasından değiştirmektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.