以编程方式更改布局的背景颜色

时间:2014-03-04 08:32:29

标签: android android-layout

Android Studio 0.4.6
minSdkVersion 10
targetSdkVersion 19

您好,

我有一个名为ReadingLamp的活动和一个名为activity_reading_lamp.xml的相对布局。

我正在尝试将布局设置为不同的背景颜色。

在我的onCreate中,将内容视图设置为此布局。

setContentView(R.layout.activity_reading_lamp);

我尝试通过执行以下操作获取根视图:

mActivityBackground = getWindow().getDecorView().getRootView();

然后在我的应用程序中我想改变颜色,所以我喜欢这样:

mActivityBackground.setBackgroundColor(Color.parseColor("#0cf5ff"));

但是,上述行没有做任何改变背景的事情。

我也尝试过以下操作:

mActivityBackground = (RelativeLayout)findViewById(R.layout.activity_reading_lamp);

我只是想知道我的代码在哪里出错?

非常感谢任何建议,

5 个答案:

答案 0 :(得分:5)

您已在setContentView(R.layout.activity_reading_lamp);中声明Activity。然后,您应该查找要更改背景颜色的视图。它必须属于R.layout.activity_reading_lamp

View view = findViewById(R.id.declared_inside_reading_lamp);

然后你可以打电话

view.setBackgroundColor(Color.GREEN)

答案 1 :(得分:2)

您必须确保activity_reading_lamp.xml中的所有布局都具有透明背景

答案 2 :(得分:2)

您需要指定需要设置的背景。例如,您可以为活动的父布局设置id,然后执行以下操作:

RelativeLayout parentLayout = (RelativeLayout)findViewById(R.id."your parent layout id and not your activity name");
parentLayout.setBackgroundColor(Color.TRANSPARENT);

答案 3 :(得分:2)

如果您想转换为新颜色,请尝试以下方法:

@SuppressLint("NewApi") private void tintColor(View rootView, String newColor) {
    // currentColor can be given as a new parameter or set as a field
    ColorDrawable[] color = {
            new ColorDrawable(Color.parseColor(currentColor)),
            new ColorDrawable(Color.parseColor(newColor)) };
    TransitionDrawable trans = new TransitionDrawable(color);
    int sdk = android.os.Build.VERSION.SDK_INT;
    if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        rootView.setBackgroundDrawable(trans);
    } else {
        rootView.setBackground(trans);
    }
    trans.startTransition(ANIMATION_TIME); // ANIMATION_TIME : time in milliseconds
}

代码接受十六进制颜色字符串。

答案 4 :(得分:2)

RelativeLayout rl = (RelativeLayout)findViewById(R.id.your_layout_id);
rl.setBackgroundColor(Color.RED);