17

我是 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 布局):

<?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 开发中动态与 XML 布局的推荐和优缺点是什么?

4

7 回答 7

26

使用布局 XML 资源文件。

首先,资源集(例如,res/layout-land/除了 res/layout/Java 中的等价物是一组讨厌的iforswitch语句。

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

第三,它往往更简洁,因此如果您手动输入这些内容,XML 将减少输入。

第四,您将找到的所有示例代码中大约 98% 将使用布局 XML 文件,并且您在 StackOverflow(和其他支持资源)上找到的所有 UI 答案中大约 98% 将假定您使用布局 XML 文件。虽然您可以自由地避免使用 XML(也许您在小时候受到尖括号的攻击或其他什么),但与大多数 Android 开发人员所做的相比,您将逆流而上,与潮流抗争。

于 2012-08-14T20:59:35.493 回答
3

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

layout-land -> 用于横向

布局端口 -> 用于纵向

layout-v15 -> 安卓版本 >= 15

layout-sw600dp -> 用于特定宽度的屏幕

使用这些资源分类器,您可以快速地在布局中拥有多种类型,以支持各种 Android 设备,而无需编写大量额外代码。

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

于 2012-08-14T21:00:46.353 回答
2

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

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

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

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

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

于 2012-08-14T21:11:52.143 回答
1

好吧,我在 xml 中声明 mu UI(99% 的时间),因为这样工作对我来说更容易。

分离 UI 和 Code 逻辑是一种很好的做法,XML 更容易描述 UI(考虑使用这个旧的设计器或切换到 Eclipse IDE 和它的设计器)

此外,一个 android 应用程序可以有多种设计(用于手机和平板电脑),用 Java 手动编码会很痛苦

简单地说,使用 XML

于 2012-08-14T21:02:03.290 回答
1

在大多数情况下,我更喜欢 XML,因为它允许您将内容与代码分开,并且编辑起来更简洁,尤其是当项目变得很大并且您忘记了前段时间编写的内容时。使用 XML 和样式也可以让您在整个应用程序中获得一致的外观和感觉。它还允许布局系统处理繁重的工作,并且您最终不会得到引用活动上下文的视图。(这很糟糕,当您旋转并重新创建活动时)。总体而言,它往往是一个更快的选择,如果您可以在 XML 中做到这一点,那么它比我喜欢的要快。大多数 android 架构/教科书似乎也遵循此设置。(参见 Android 开发文档,CommonsWare 的 Mark Murphy)

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

于 2012-08-14T21:02:16.880 回答
1

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

我希望这有帮助。

于 2012-08-14T21:04:47.727 回答
0

这是一个相当晚的回应,但有人会发现它很有帮助。我目前正在制作一个,可让您使用在服务器上声明的动态布局。你可以在这里找到它:https ://github.com/jelic98/dynamico

于 2018-04-13T10:18:35.203 回答