在Android设计中,我很难掌握一个特定的概念。我所指的书首先使用了Java程序员用来创建UI的常用技术,即创建容器,向容器中添加UI组件,并在必要时嵌套它们。
现在,本书引入了一个新概念,即使用XML文件创建整个UI。该代码粘贴在下面:
package com.oreilly.android.intro;
import android.app.Activity;
import android.os.Bundle;
/**
* Android UI demo program
*/
public class AndroidDemo extends Activity {
private LinearLayout root;
@Override public void onCreate(Bundle state) {
super.onCreate(state);
setContentView(R.layout.main);
root = (LinearLayout) findViewById(R.id.root);
}
} 所以,基本上,我可以使用,任何?
发布于 2013-07-03 15:37:01
简单的回答,是的,你可以使用任何一种方法。但是,每个属性都有一些限制,例如,如果要使用layout属性,则必须在xml中设置这些属性。我想不出有什么是直接的,但我可以查一查。
在大多数情况下,用xml创建layouts要简单得多,但是如果需要,可以选择在Views和layouts中设置Views和layouts,比如根据用户定义的变量创建未知数量的Buttons。
当您用xml创建UI时,您可以在inflate代码中创建它。这通常是在onCreate()中完成的
setContentView(R.layout.main);正如你在你的例子中所看到的。但这也可以通过充气器来完成。
这里要记住的是,在尝试初始化layout中的任何views之前,都要使用任何一种方法来膨胀您的View,否则在尝试调用包含在其中的View上的方法之前,您将得到一个NPE。
正确的方式
**Examples of inflating views/layouts correctly**
Button mBtn;
public class AndroidDemo extends Activity {
private LinearLayout root;
@Override public void onCreate(Bundle state) {
super.onCreate(state);
setContentView(R.layout.main);
root = (LinearLayout) findViewById(R.id.root);
btn = (Button) findViewById(R.id.buttonId); // Button is initialized after inflating the layout
}
} 不正确的方式
public class AndroidDemo extends Activity {
private LinearLayout root;
@Override public void onCreate(Bundle state) {
super.onCreate(state);
Button mBtn = (Button) findViewById(R.id.buttonId); // Button is initialized before inflating layout which will return null
setContentView(R.layout.main);
root = (LinearLayout) findViewById(R.id.root);
}
} 我添加了上面的例子,因为我看到很多人都犯了这个错误。所以不要这么做.你已经被警告了!:)
发布于 2013-07-03 15:37:09
不太清楚你在问什么,但两者是可以互换的。大多数情况下,您的UI将通过xml完成。但是,在某些情况下,ui严重依赖于数据,因此您可能需要动态生成它。
基本上可以归结为当时对你来说最容易的。
发布于 2013-07-03 15:37:16
是。但是最好使用xml,它更强大、更容易,并且将布局与代码分离。看看这些文档:http://developer.android.com/guide/topics/ui/declaring-layout.html
https://stackoverflow.com/questions/17452181
复制相似问题