Android中的动态vs XML布局?

我是Android开发的新手,已经开始创建自己的UI。 我看到你可以动态创建它( 动态布局 ):

@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有一个文件Resources-> layout-> main.xml 。 因此,您可以为UI创建XML布局( 声明XML布局 ):

     

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

    使用布局XML资源文件。

    首先,资源集(例如, res/layout-land/res/layout/ )允许您定义在不同情况下使用的多个UI,系统会根据需要自动选择正确的UI。 Java中的等价物将是一组令人讨厌的ifswitch语句。

    其次,有些工具可以帮助您成功创建这些布局资源。 即使Eclipse的拖放式GUI构建不是你的一杯茶(例如,你正在使用NetBeans),Lint将帮助指出布局中的缺陷,为此它只会指出其中的一个子集。等效的Java代码。

    第三,它往往更简洁,所以如果你手工输入这些东西,XML就会减少输入。

    第四,您将find的所有示例代码中大约98%将使用布局XML文件,并且您在StackOverflow(和其他支持资源)上find的所有UI答案的大约98%将假定您使用布局XML文件。 虽然你可以自由地避免使用XML – 也许你会像小孩子一样被尖括号攻击 – 你会游到上游,与大多数Android开发者相比,当前正在游击。

    我建议对项目的大多数部分使用xml布局。 您可以将布局放在不同的文件夹中,例如:

    layout-land – > for landscape

    layout-port – >用于肖像

    layout-v15 – > for android version> = 15

    layout-sw600dp – >用于具有一定宽度的屏幕

    使用这些资源分类器,您可以快速在各种布局中使用各种各样的Android设备,而无需额外编写代码。

    在我的观点中,这是使用xml资源与动态创建所有布局的最大优势。 有关更多信息,请参阅此链接有关资源

    基于XML的布局取决于强制转换,因为您必须使用:

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

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

    我更喜欢第三种解决方案 – RoboGuice它使用dependency injection模式,你不关心强制转换,创建应用程序的速度更快。 也更灵活。 请考虑您有一个普通的文本字段。 然后您想将其更改为文本区域。 在RoboGuice中,只有2个更改(使用更改除外)。 当你使用Context时,它也会更快(Context是非常消耗内存的对象,并且存储对它的引用是编码错误的标志)。

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

    好吧,我在xml中声明mu UI(99%的时间),因为我更容易以这种方式工作。

    将UI和代码逻辑分开是很好的做法,XML更容易描述UI(考虑使用这个旧设计师或切换到Eclipse IDE及其设计者)

    此外,一个Android应用程序可以有多个设计(手机和平板电脑),用Java手动编码将是痛苦的

    简单地说,使用XML

    我更喜欢XML用于大多数事情,因为它允许您将内容与代码分开,编辑往往更清晰,特别是当项目变大并且您忘记了之前写的内容时。 使用XML和样式可以让您在整个应用程序中获得一致的外观。 它还允许布局系统处理繁重的工作,并且您不会得到具有对您的活动的上下文的引用的视图。 (这很糟糕,当你旋转并重新创建你的活动时)。 总的来说,它往往是一个更快的选择,如果你可以用XML做我喜欢的。 大多数android archtiecture /教科书似乎也遵循这种设置。 (参见Android Dev Docs,CommonsWare的Mark Murphy)

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

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

    我希望这有帮助。

    这是一个相当晚的回应,但有人可能会发现它有用。 我目前正在创建一个 ,允许您使用在服务器上声明的动态布局。 你可以在这里find它: https : //github.com/jelic98/dynamico