tablayout选中图标变色
时间: 2024-10-07 15:03:17 浏览: 36
TabLayout是Android中用于显示卡片式布局(类似于标签页)的控件,当某个选项被选中时,通常会通过改变对应的图标样式或者颜色来表示当前选中状态。在使用TabLayout时,你可以通过以下步骤来实现图标在选中时变色:
1. 首先,确保你的`TabLayout`和`ViewPager`关联在一起,并设置好对应的数据源。
```xml
<TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
< ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tab_layout" />
```
2. 创建自定义的`TabItem`或者`TabProvider`类,这里可以包含一个带颜色的图标,比如使用`DrawableCompat.setState`来切换颜色。
```java
class CustomTabProvider extends TabProvider {
private final int[] SELECTED_STATE_SET = {android.R.attr.state_selected};
@NonNull
@Override
public androidx.annotation.DimenRes int getIndicatorDimension() {
return R.dimen.tab_indicator_height;
}
@NonNull
@Override
public androidx.core.content.res.ColorStateList getIndicatorColor(@Nullable Integer position) {
if (position == getCurrentPosition()) {
return AppCompatResources.getColorStateList(R.color.selected_tab_color);
}
return AppCompatResources.getColorStateList(R.color.unselected_tab_color);
}
// ...
@NonNull
@Override
public View newTabView(ViewGroup parent) {
TextView textView = new TextView(parent.getContext());
textView.setText(tabTitle);
// 添加一个ImageView并监听点击事件
ImageView imageView = new ImageView(parent.getContext());
imageView.setImageDrawable(getDrawable(position));
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectTab(position);
}
});
// 将ImageView添加到布局中,例如使用LinearLayout
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.weight = 1; // 如果需要等比例分配空间
textView.setLayoutParams(layoutParams);
layout.addView(textView);
layout.addView(imageView);
return layout;
}
// ...
}
```
在这里,你需要替换`R.color.selected_tab_color`和`R.color.unselected_tab_color`为你的项目资源中的颜色值,`getDrawable(position)`应该是获取相应位置的图标。
阅读全文