Android UI可以通过代码* AND * XML创建吗?

时间:2013-07-03 15:33:53

标签: android view

我在掌握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);
 }
}  

基本上,我可以使用任何吗?

3 个答案:

答案 0 :(得分:4)

简单回答,是的,您可以使用任何一种方法。但是,每个都有一些限制,例如,如果要使用它们,则必须在xml中设置layout属性。我想不出什么是副手,但我可以查看它们。

在大多数情况下,在xml中创建layouts要简单得多,但是如果需要创建,可以选择在Java中设置Viewslayouts未知数量的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