我对 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
}
这里的区别是什么?
为什么第一个代码没有正常工作?
这个指向当前的布局吗?
提前谢谢!
答案 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。因此,我建议您使用您在问题中正常发布的解决方案。这更简单,更好。这个答案只能解决你的第一种不起作用的方法,但你也真的需要了解我所写的内容。
希望有所帮助。 :)