Как изменить цвет фона вкладки при использовании 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>
Я хочу изменить цвет фона одной вкладке, когда он выбран
7 ответов:
то, что наконец сработало для меня, похоже на то, что предложил @是是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>
Вы можете попробовать это:
<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>
добавить атрибут в xml:
<android.support.design.widget.TabLayout .... app:tabBackground="@drawable/tab_color_selector" ... />и создать в 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>
вы пробовали проверять API?
вам нужно будет создать прослушиватель для
OnTabSelectedListenerсобытие, затем, когда пользователь выбирает любую вкладку, вы должны проверить, является ли она правильной, а затем изменить цвет фона с помощьюtabLayout.setBackgroundColor(int color), или если это не правильная вкладка, убедитесь, что вы снова вернулись к нормальному цвету с тем же методом.
вы можете иметь его в 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"/>
вы можете изменить цвет фона или пульсации каждой вкладки следующим образом:
//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)); } } }
Comments