Android中的动态与XML布局?

问题描述:

我是Android新手,已经开始创建自己的用户界面。我看到,你可以创建动态像这样(Dynamic Layouts):Android中的动态与XML布局?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ScrollView sv = new ScrollView(this); 
    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    sv.addView(ll); 
    TextView tv = new TextView(this); 
    tv.setText("Name"); 
    ll.addView(tv); 
    EditText et = new EditText(this); 
    ll.addView(et); 
    Button b = new Button(this); 
    b.setText("Ok"); 
    ll.addView(b); 
} 

,但我也看到,NetBeans已经有文件资源 - >布局 - > main.xml中。所以,你可以创建用户界面(Declaring XML layout)的XML布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, AndroidTest" 
    /> 
</LinearLayout> 

所以我的问题是,我应该使用哪一个?什么是推荐,以及Android开发中动态vs XML布局的优点/缺点?

使用布局XML资源文件。首先,资源集(例如,除res/layout/之外的res/layout-land/)允许您定义在不同情况下使用的多个UI,并且系统根据需要自动选择正确的UI。 Java中的等价物将是一组令人讨厌的ifswitch陈述。

其次,有一些工具可以帮助您成功创建这些布局资源。即使Eclipse的拖放式GUI构建不是您的一杯茶(例如,您使用的是NetBeans),Lint也会帮助指出您的布局中的缺陷,为此只会指出其中的一个子集等效的Java代码。第三,它往往更简洁,所以如果你手工输入这些东西,那么XML的输入就会少一些。第四,大约98%的示例代码将使用布局XML文件,并且您在*(以及其他支持资源)上找到的所有UI答案中的大约98%将假定您使用布局XML文件。尽管你可以*地避免使用XML - 也许你在年龄较小的时候受到了尖括号的攻击 - 但是与大多数Android开发人员相比,你将会向上游游泳,与目前的战斗相比。

+0

+1谢谢。 XML就是这样。我有一种感觉,尽管它在Android网站上使用XML的大部分代码。 – 2012-08-14 21:04:30

+5

另外,在Java代码中,您必须编译并运行代码,以查看布局如何,而在XML中(如果您使用的是Eclipse),您可以使用eclipse提供的工具直接查看它。 – 2012-08-14 21:06:46

我会推荐你​​的项目的大部分使用xml布局。 可以放在不同的文件夹中的布局,如:

布局土地 - >景观

布局端口 - >人像

布局-V15 - > Android版版本> = 15

布局sw600dp - >对于具有一定宽度

屏幕使用这些资源的分类,你可以快速地在你的布局,各种支持广泛的Android设备,而不需要编写一个LO额外的。

在我看来,这是使用xml资源vs动态创建所有布局的最大优势。欲了解更多信息,请参阅this link about resources

+0

+1现在我看到与XML至少一些关于UI不一致的担心将被取消我的回复 – 2012-08-14 21:06:32

那么,我声明μUI在XML(99%的时间),因为我更容易以这种方式工作。

这是很好的做法,单独的用户界面和代码逻辑,XML是用于描述UI更容易(可以考虑使用this old designer或切换到Eclipse IDE和它的设计师)

而且,一个Android应用程序可以有多个设计(适用于手机和片),这将是不好受手工代码,在Java中

简单地说,使用XML

+0

+1谢谢..所以Eclipse有一个可视化的设计器为Android? – 2012-08-14 21:05:14

+1

是的,它是Eclipse的ADT Plugin的一部分..... [help](http://developer.android.com/sdk/installing/installing-adt.html) – 2012-08-14 21:08:18

+0

XML的使用不会分离UI和代码逻辑。 – 2013-09-14 14:43:16

我喜欢XML的大部分事情,因为它可以让你分开的代码内容,它往往是吸尘器特别编辑当项目变大,而你忘记了你刚才写的内容时。使用XML和样式可以让您在整个应用程序中获得一致的外观和感觉。它还允许布局系统负责繁重的工作,而且不会以视图引用活动的上下文为结束。 (这是不好的,当你旋转和你的活动重新创建)。总的来说,它往往是一个更快的选择,如果你可以用XML来完成比我喜欢的。大多数的android archtiecture /教科书似乎也都遵循这个设置。 (请参阅Android开发文档,CommonsWare的Mark Murphy)

Dynamic有一个好处,它能够以更高级的方式定制一些东西,并且可以很容易地修复一些布局问题。除此之外还有一些好处,但我更喜欢先用XML做所有事情,如果不能完成或难以实现,那就用代码完成。 XML中的某些操作可能比代码中的操作更容易。

这完全是你自己的选择。您可能会发现大多数Android开发人员都使用XML来编写其应用程序的布局,因为这是专门为此设计的。但我个人来自游戏开发背景,并不真正需要Android提供的UI小部件,所以当我使用UI小部件时,我只需用java编写代码。

我希望这会有所帮助。基于XML

+0

+1感谢您的意见 – 2012-08-14 21:10:03

布局取决于铸造的,因为你必须使用:

Button myButton = (Button) findViewById(R.id.my_button); 

让你有一个铸造,耗时XML搜索。 当您使用UI的动态创建更难以管理它。你必须组织一切,但你不需要投入太多。

我更喜欢第三种解决方案 - RoboGuice 它使用依赖注入模式,您不需要关心转换,创建应用程序会更快。也更灵活。考虑你有一个正常的文本字段。然后你想把它改为文本区域。在RoboGuice中,只有2次更改(用法更改除外)。使用Context时,速度也会更快(上下文非常耗费内存对象,并且存储对它的引用是错误编码的标志)。

所以我的建议是:使用XML,因为它简单的管理UI。使用RoboGuice可以快速编码。