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