TabLayout 以编程方式设置选项卡背景状态
TabLayout set tab background states programmatically
我正在尝试通过代码在具有不同状态的 TabLayout
中的自定义视图上设置背景。
有几个标题相似的问题,但它们涉及 XML。
据我所知,mTabBackgroundResId
仅通过 XML 设置,并在创建时应用于 TabView
。但是,由于我使用的是自定义视图,因此它不适用。通过代码或 XML 在自定义视图上设置背景只会导致如下结果:
public class MyTabLayout extends TabLayout {
private LinearLayout linearLayout;
private void init(Context context, attrs etc.) {
linearLayout = (LinearLayout) getChildAt(0);
}
private StateListDrawable getStateListDrawable() {
StateListDrawable sld = new StateListDrawable();
sld.addState(new int[] {android.R.attr.state_pressed},
ContextCompat.getDrawable(context, <color_id>);
sld.addState(new int[] {android.R.attr.state_selected},
ContextCompat.getDrawable(context, <color_id>);
sld.addState(new int[] { },
ContextCompat.getDrawable(context, <color_id>);
return sld;
}
public void addTab(String label) {
addTab(newTab().setCustomView(<view> or <view_id>);
linearLayout.getChildAt(linearLayout.getChildCount()-1)
.setBackground(getStateListDrawable());
}
}
我正在尝试通过代码在具有不同状态的 TabLayout
中的自定义视图上设置背景。
有几个标题相似的问题,但它们涉及 XML。
据我所知,mTabBackgroundResId
仅通过 XML 设置,并在创建时应用于 TabView
。但是,由于我使用的是自定义视图,因此它不适用。通过代码或 XML 在自定义视图上设置背景只会导致如下结果:
public class MyTabLayout extends TabLayout {
private LinearLayout linearLayout;
private void init(Context context, attrs etc.) {
linearLayout = (LinearLayout) getChildAt(0);
}
private StateListDrawable getStateListDrawable() {
StateListDrawable sld = new StateListDrawable();
sld.addState(new int[] {android.R.attr.state_pressed},
ContextCompat.getDrawable(context, <color_id>);
sld.addState(new int[] {android.R.attr.state_selected},
ContextCompat.getDrawable(context, <color_id>);
sld.addState(new int[] { },
ContextCompat.getDrawable(context, <color_id>);
return sld;
}
public void addTab(String label) {
addTab(newTab().setCustomView(<view> or <view_id>);
linearLayout.getChildAt(linearLayout.getChildCount()-1)
.setBackground(getStateListDrawable());
}
}