【问题标题】:What is the advantage of using xml for layout?使用xml进行布局有什么好处?
【发布时间】:2011-09-28 11:12:48
【问题描述】:

我已经阅读了一些教程等,并发现我可以在代码中定义我的所有 UI 组件获得相同的结果。

例如:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    TextView tv = new TextView(this);
    tv.setText("hello");
    LinearLayout ll = new LinearLayout(this);
    ll.addView(tv);
    setContentView(ll);
}

相当于

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

+

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/hello"/>

为此使用 XML 有哪些性能/可维护性优势?

如果程序员更喜欢使用代码而不是 XML,应该考虑哪些额外的因素?

【问题讨论】:

  • 对这种重复的问题表示歉意(正如 Yan 指出的那样).. 我确实进行了搜索,但没有找到任何相关内容。

标签: android xml android-layout


【解决方案1】:

为此使用 XML 有哪些可维护性优势?

  1. 逻辑与表示分离。当您需要重构某些代码时,这确实有助于大型项目。如果它与 UI 紧密耦合,如果大部分表示逻辑都在代码中,那么这项工作很容易变得耗时。
  2. XML 的结构与用户界面的结构非常相关,即树状结构。

为此使用 XML 有哪些性能优势?

这一切都取决于我想的实现。我怀疑是否存在任何明显的性能差异,但老实说,我没有足够的知识来明确地说出它们可能是什么。

【讨论】:

  • 实际上 XML 的性能更差,因为它首先需要在设备上进行解析:参见Anko Why DSL。但我想这对大多数项目来说应该不会有太大的不同。
【解决方案2】:

您可以参考Why using XML to create GUI is a good practice in Android

对我来说,我觉得这更像是个人品味。我来自 Java Swing 背景。在进行桌面应用程序开发时,我更喜欢以编程方式创建 GUI。

然而,在 Android 开发方面,我将坚持基于 XML 的 GUI 开发,尽管我更喜欢使用代码而不是 XML。

这是因为,我倾向于遵循大多数人喜欢的编码风格和神话,这使我很容易获得技术支持和教程。

【讨论】:

  • 使用 XML 布局如何意味着您没有使用 OO 构造?这些都是 XML 下的对象,我看不出有什么区别。
  • 当我说 OO 时,我的意思是 Label l = new Label()
  • @Yan 你的意思是编程,而不是 OOP。
【解决方案3】:

XML 布局在编译时会转换为 Java 代码,因此性能应该相同。我更喜欢使用 XML,因为很多文档和教程都使用了它;这是写出 UI 的 Android 方式。此外,XML 往往更易于重用。

【讨论】:

    【解决方案4】:

    XML 文件被集成到资源框架中,这意味着您可以轻松地为不同的屏幕尺寸(以及密度、语言等)指定不同的布局。由于设备的多样性,这在 android 中很重要。

    您当然可以通过编程方式执行此操作,但您会添加大量不必要的代码膨胀,并且您的应用可能更难维护。

    布局 XML 编辑器的状态目前是一个问题,但在 google IO 上发布了公告/演示,表明正在进行重大改进......等不及了。

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2011-01-11
      • 1970-01-01
      • 2011-02-04
      相关资源
      最近更新 更多