我在掌握Android UI设计中的某个概念时遇到了麻烦。我所指的书首先使用Java程序员用来创建UI的常用技术,即创建容器并向其添加UI组件并根据需要嵌套它们。
现在,本书介绍了一个新概念,其中整个UI是使用XML文件创建的。代码粘贴在下面:
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);
}
}
基本上,我可以使用任何吗?
答案 0 :(得分:4)
简单回答,是的,您可以使用任何一种方法。但是,每个都有一些限制,例如,如果要使用它们,则必须在xml中设置layout
属性。我想不出什么是副手,但我可以查看它们。
在大多数情况下,在xml中创建layouts
要简单得多,但是如果需要创建,可以选择在Java中设置Views
和layouts
未知数量的Buttons
取决于某个用户定义的变量。
在xml中创建UI
时,在Java代码中inflate
。这通常在onCreate()
使用
setContentView(R.layout.main);
正如您在示例中看到的那样。但也可以使用inflater来完成。
此处要记住的是,在尝试初始化layout
中的任何views
之前,使用其中一种方法对layout
进行充气,否则您将获得NPE
尝试在View
上定义layout
之前调用方法,然后将**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);
}
}
方式不正确
{{1}}
我添加了上面的例子,因为我看到很多人都犯了这个错误。所以不要这样做......你已被警告过了! :)
答案 1 :(得分:2)
不完全确定你在问什么,但这两者是可以互换的。 大多数情况下,您的UI将通过xml完成。但在某些情况下,ui严重依赖于数据,因此您可能需要动态生成它。
它基本上归结为当时最容易的。
答案 2 :(得分:1)
是。 但是最好使用xml,它更强大,更容易,并将布局与代码分开。 看看文档: http://developer.android.com/guide/topics/ui/declaring-layout.html