This is my code in the main activity
这是我在主要活动中的代码
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);
}
}
And this is my code in the XML
这是我在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>
I want to change the background color of one tab when it's selected
我想在选中时更改一个标签的背景颜色
7 个解决方案
#1
186
What finally worked for me is similar to what @如果我是DJ suggested, but the tabBackground
should be in the layout
file and not inside the style
, so it looks like:
最终对我有用的是类似于@如果我是DJ建议的,但tabBackground应该在布局文件中,而不是在样式内,所以看起来像:
res/layout/somefile.xml
:
RES /布局/ somefile.xml:
<android.support.design.widget.TabLayout
....
app:tabBackground="@drawable/tab_color_selector"
...
/>
and the selector res/drawable/tab_color_selector.xml
:
和选择器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
14
You can try this:
你可以试试这个:
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabBackground">@drawable/background</item>
</style>
In your background xml file:
在你的后台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>
#3
9
Add atribute in xml:
在xml中添加属性:
<android.support.design.widget.TabLayout
....
app:tabBackground="@drawable/tab_color_selector"
...
/>
And create in drawable folder, tab_color_selector.xml
并在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>
#4
2
Have you tried checking the API?
您是否尝试过检查API?
You will need to create a listener for the OnTabSelectedListener
event, then when a user selects any tab you should check if it is the correct one, then change the background color using tabLayout.setBackgroundColor(int color)
, or if it is not the correct tab make sure you change back to the normal color again with the same method.
您需要为OnTabSelectedListener事件创建一个侦听器,然后当用户选择任何选项卡时,您应检查它是否是正确的选项卡,然后使用tabLayout.setBackgroundColor(int color)更改背景颜色,或者如果它不正确选项卡确保使用相同的方法再次更改回正常颜色。
#5
2
You can have it in the xml.
你可以在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"/>
#6
0
You can change the background or ripple color of each Tab like this:
您可以像这样更改每个Tab的背景或波纹颜色:
//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));
}
}
}
#7
0
One of simplest solution is to change colorPrimary from colors.xml file.
最简单的解决方案之一是从colors.xml文件中更改colorPrimary。
#1
186
What finally worked for me is similar to what @如果我是DJ suggested, but the tabBackground
should be in the layout
file and not inside the style
, so it looks like:
最终对我有用的是类似于@如果我是DJ建议的,但tabBackground应该在布局文件中,而不是在样式内,所以看起来像:
res/layout/somefile.xml
:
RES /布局/ somefile.xml:
<android.support.design.widget.TabLayout
....
app:tabBackground="@drawable/tab_color_selector"
...
/>
and the selector res/drawable/tab_color_selector.xml
:
和选择器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
14
You can try this:
你可以试试这个:
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabBackground">@drawable/background</item>
</style>
In your background xml file:
在你的后台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>
#3
9
Add atribute in xml:
在xml中添加属性:
<android.support.design.widget.TabLayout
....
app:tabBackground="@drawable/tab_color_selector"
...
/>
And create in drawable folder, tab_color_selector.xml
并在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>
#4
2
Have you tried checking the API?
您是否尝试过检查API?
You will need to create a listener for the OnTabSelectedListener
event, then when a user selects any tab you should check if it is the correct one, then change the background color using tabLayout.setBackgroundColor(int color)
, or if it is not the correct tab make sure you change back to the normal color again with the same method.
您需要为OnTabSelectedListener事件创建一个侦听器,然后当用户选择任何选项卡时,您应检查它是否是正确的选项卡,然后使用tabLayout.setBackgroundColor(int color)更改背景颜色,或者如果它不正确选项卡确保使用相同的方法再次更改回正常颜色。
#5
2
You can have it in the xml.
你可以在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"/>
#6
0
You can change the background or ripple color of each Tab like this:
您可以像这样更改每个Tab的背景或波纹颜色:
//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));
}
}
}
#7
0
One of simplest solution is to change colorPrimary from colors.xml file.
最简单的解决方案之一是从colors.xml文件中更改colorPrimary。