避免重复 UI 代码

Avoid duplicating UI codes

我想编写新的 UI class,其中包含复选框和标签。目前存在 UI class 具有相同的元素,但它们的元素描述不同。但是两个 UI 的数据模型将是相同的。

因此,将 UI classes(通过复制 GridBagConstraints 和其他东西)分开 是好习惯吗?将公共代码移动到抽象层 并在实现层导出 UI 元素的描述?

您还可以尝试其他一些方法,这样可以避免重复 UI 代码,我会给您举两个例子:

  1. 您可以使用标签将 UI 代码放入另一个布局文件中,并在您当前的布局中显示它,最后您将能够直接从您当前的 Activity 中调用它或 Fragment 的方式与处理 Fragment 或 Activity class.
  2. 根部的其他元素的方式相同

Re-using layouts

第一个布局文件名为:include_example_layout.xml

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/textView_includeExampleLayout_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <CheckBox
        android:id="@+id/checkBox_includeExampleLayout_valid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</merge>

第二个布局文件名为:activity_main.xml

<LinearLayout>

    <include layout="@layout/toolbar_search_algolia"/>

</LinearLayout>

并且从 MainActivity 文件中,您将能够调用此文件的 ID include_example_layout,就好像它们是直接在您的 activity_main 文件中声明的一样,因此您将能够重复使用它。

  1. 第二种方法是创建一个 View 元素,这比第一种方法有一个额外的优势,但有点复杂,问题是您可以将一些 UI 逻辑移动到 class 的新视图元素,例如,如果您想在信息发生某些事情时禁用复选框,您可以将逻辑移至新视图 class.

Custom View

我不会写关于这个的完整教程,因为它是一个广泛的主题,但我会在其他地方留下一些示例,帮助您理解最基本的概念,您可以通过两种方式构建CustomViews 第一个是扩展视图 class,这将迫使您从头开始创建它,但您也可以扩展其他视图,如 LinearLayout,这将帮助您开始使用 CustomView 的概念(不是在任何情况下都推荐,如果你不明智地使用它,它会减慢你的 UI)

Example extending LinearLayout

Example extending View