为什么setBackgroundResource()在我的自定义视图中不起作用?

时间:2017-01-18 11:07:13

标签: android android-layout

我使用以下代码创建了自定义视图:

tag

layout_test.xml:

public class TestView extends LinearLayout {
    public TestView(Context context) {
        this(context, null);
    }

    public TestView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TestView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

    private void initView(Context context) {
        LayoutInflater.from(context).inflate(R.layout.layout_test, this);
        setBackgroundResource(R.color.black);
    }

}

效果很好,背景是黑色的。 但是一旦我将背景属性添加到xml,setBackgroundResource 不再工作了(layout_test.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"/>

activity_layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"/>

github.com/MummyDing/TestView

3 个答案:

答案 0 :(得分:0)

尝试在上下文

的帮助下使用
LayoutInflater.from(context).inflate(R.layout.layout_test, this).
                setBackgroundColor(context.getResources().getColor(R.color.colorAccent));

答案 1 :(得分:0)

试试这个。

 public class TestView extends LinearLayout {
        public TestView(Context context) {
            this(context, null);
            setBackgroundResource(R.color.black);
        }

        public TestView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }

        public TestView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            initView(context);
        }

        private void initView(Context context) {
            LayoutInflater.from(context).inflate(R.layout.layout_test, this);

        }

    }

答案 2 :(得分:0)

尝试使用ID:

LinearLayout lLayout = (LinearLayout) findViewById(R.layout.my_linear_id);       
lLayout.setBackgroundColor(context.getResources().getColor(R.color.green_color));

my_linear_id 是您 LinearLayout ID