Android平台中的布局和代码之间的独立性

时间:2018-02-18 13:33:25

标签: java android android-layout android-studio

如果Android使用XML布局将Java代码与应用程序布局分开,为什么我必须在Fragments布局中指定Java类,如下面的代码?在这种情况下,如果我改变类名(Java代码),我也必须改变XML布局。这对我来说听起来不那么独立。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/titles"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="course.examples.fragments.staticlayout.TitlesFragment" />

    <fragment
        android:id="@+id/details"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="2"
        class="course.examples.fragments.staticlayout.QuotesFragment" />

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

  

为什么我必须在Fragments布局中指定Java类,如下面的代码?

布局资源中的绝大多数XML元素都指定了Java类名。在您的示例中,@IBOutlet weak var lstPriority: UIPickerView! // Array for picker wheel items let lstPriorityOptions = ["Low", "Medium", "High"] // Function to get selected value from picker wheel public func GetSelected() -> String { let pickerView: UIPickerView let valueSelected = lstPriorityOptions[row] as String return valueSelected } // Button click event, this is where I will be calling the above function @IBAction func btnAdd(_ sender: Any) { if txtNewItem.text != "" { let newToDoItem = ToDoItem(ToDoItemText: txtNewItem.text!, ToDoItemPriority: GetSelected()) ToDoItemList.append(newToDoItem) txtNewItem.text = "" } } 是Java类名。

LinearLayout逻辑查看元素名称并将其视为Java类名,除了一些专门的元素名称,如LayoutInflater。有时,对于来自库(例如fragment)或您自己的类(例如android.support.constraint.ConstraintLayout)的类,该Java类名称是完全限定的。如果Java类名称没有包(例如com.commonsware.cwac.RecyclerViewEx),LinearLayout会在一些众所周知的Java包(例如LayoutInflater)中查找它。

android.widget的情况下,类名恰好采用<fragment>属性的形式,可能有助于class区分视图和片段。

  

在这种情况下,如果我改变了类名(Java代码),我也必须改变XML布局。

正确。这与布局资源中的大多数其他元素没有什么不同。

  

如果Android使用XML布局将Java代码与应用程序布局分开

Android使用布局资源来帮助处理不同的配置(例如,纵向/横向,小/大屏幕)。其次,布局资源有助于将UI配置与Java代码隔离开来,这在一定程度上更容易让IDE等工具进行操作。

答案 1 :(得分:0)

我将向CommonWare&#39;添加更多简单的解释。答案

fragment

XML中使用Button标记就像另一个视图(ImageViewfragment .....)。在这种情况下,您不必将Java code添加到fragment中的布局中。系统会自动将fragment添加到您的布局中,fragment将表现为静态,因为您无法在运行时将其替换为其他fragment。要在运行时更改片段,您必须添加{{1}在Java code中自己进入像FrameLayout这样的片段容器。