Android中Java和XML之间的关系

作为Android的初学者,Java和XML之间的关系是困扰我的问题之一。通过查阅资料,发现如下链接,

http://programmers.stackexchange.com/questions/188128/java-xml-intraction-in-android

现在把它翻译过来,供自己和大家参考。由于本人还在入门阶段,所以翻译可能有失偏颇,如有错误,还请指正。

  • 问题

我正在做Android开发。我经常想这个问题:XML是如何与Java代码交互的?

我的意思是,Button在XML中是一个View,但是Button同时也是一个Java类。当展示layout的时候,我们用setContentView(R.layout.name)。我想知道,XML是如何和Java交互的?这里面用了什么技术,有什么代码?

  • 回答1:

为了理解两者之间的关系,我首先说清楚一点。你提到“Button在XML中是一个View,但是Button同时也是一个Java类”,这没错,但是概念有点狭窄。一个Button在XML中不仅仅是一个View,它还是一个类。

View是一个Java中类。Button是View的一个子类。XML layout提供了一种简单的安置多个View对象,创建UI的方法。你利用XML layout做的任何事情,都可以用Java来完成。但是Android用XML来简化这个过程。

看下面这个例子,我们可以用XML和Java实现同样的UI.

—- 用XML实现UI:

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/black" >

    <LinearLayout android:id="@+id/left_container"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

LinearLayout>

MainActivity.java

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

—- 用Java实现UI:

public static final int LEFT_CONTAINER = 0x0710001B;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout parent = new LinearLayout(this);
    parent.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    parent.setBackgroundColor(getResources().getColor(android.R.color.black));

    LinearLayout child = new LinearLayout(this);
    child.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    child.setId(LEFT_CONTAINER);
    parent.addView(child);

    setContentView(parent);
}

这是一个非常简单的layout,所以需要的代码也比较少。如果我们需要定制一个有多个container和多个控制器的UI,那么Java代码就会变的很乱,并且很容易出错。而且,你有可能增加MainActivity类的依赖关系,因为它保存了layout里面所有的ID.

通过使用XML,你把大部分的layout代码都限制在一个独立的文件中,并且为了创建UI所写的代码量也减小了,Android的Activity父类会帮你完成这些事情。而且,通过把所有关于layout的ID都放到R类中,你减少了依赖关系。

  • 回答2:

简单来说,XML layout提供了一种把视图层级关系和Java代码分开的方法。这样你可以更加方便的修改和编辑UI。

当你用setContentView(R.layout.mylayout)展示XML配置的layout的时候,Android会自动解析mylayout.xml并且建立LinearLayout类,同时把它加到以View为根的树中。

你可能感兴趣的:(Android)