我对 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
}
这里有什么区别?
为什么第一个代码不能正常工作?
this不应该指向当前布局吗?
提前谢谢您!
最佳答案
在第一种方式中,您创建了一个新的RelativeLayout,但没有将其添加到您的 View 中。有两种方法可以解决此问题:
第一种方法:
在 onCreate() 之上,声明您的 View :
RelativeLayout layout;
在 onCreate() 中,添加以下内容:
layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED);
setContentView(layout);
第二种方式:
在 onCreate() 之上,声明您的 View :
RelativeLayout layout;
在 onCreate() 中,添加以下内容:
RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.colorLayout);
layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED);
mainLayout.addView(layout);
但是如果你这样做,你现在将有两个RelativeLayout。因此,我建议您使用您在问题中通常发布的解决方案。这样更简单,也更好。这个答案仅修复了您第一种不起作用的方法,但您也确实需要学习我写的内容。
希望有帮助。 :)
关于java - 对 onCreate 方法期间引用布局感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32167787/