在onCreate方法期间对引用布局感到困惑

时间:2015-08-23 14:34:48

标签: java android

我对 this 的行为以及onCreate方法中的引用布局感到有些困惑。

我正在创建一个小型应用程序来试验android,它的目的是改变布局的背景颜色。

这是一段代码的测试代码,但是我担心它应该有效但不会:

private RelativeLayout layout;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    layout = new RelativeLayout(this);
    layout.setBackgroundColor(Color.RED); // nothing happens
}

但是,如果我这样做,它可以工作:

private RelativeLayout layout;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    layout = (RelativeLayout)findViewById(R.id.colorLayout);
    layout.setBackgroundColor(Color.RED); // color changes
}

这里的区别是什么?

为什么第一个代码没有正常工作?

这个指向当前的布局吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

下面

layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED); // nothing happens

layout RelativeLayout的对象刚创建时未添加到活动内容布局中。

使其生效layout对象传递给setContentView

setContentView(layout);

答案 1 :(得分:2)

在第一种方式中,您创建了一个新的RelativeLayout,但未将其添加到您的视图中。有两种方法可以解决这个问题:

第一种方式:

在onCreate()之上,声明你的观点:

RelativeLayout layout;

在你的onCreate()中,添加:

layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED);
setContentView(layout);

第二种方式:

在onCreate()之上,声明你的观点:

RelativeLayout layout;

在你的onCreate()中,添加:

RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.colorLayout);
layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED);
mainLayout.addView(layout);

但如果你这样做,你现在将有两个RelativeLayout。因此,我建议您使用您在问题中正常发布的解决方案。这更简单,更好。这个答案只能解决你的第一种不起作用的方法,但你也真的需要了解我所写的内容。

希望有所帮助。 :)