首页 > 解决方案 > 避免重复 UI 代码

问题描述

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

那么,为每个类保留单独的 UI 类(通过复制 GridBagConstraints 和其他东西)或将公共代码移动到抽象层并在实现级别导出 UI 元素的描述是一种好的做法吗?

标签: javauser-interfacecode-duplication

解决方案


还有一些其他的事情你可以尝试,这样你就可以避免重复 UI 代码,我会给你 2 个例子:

  1. 您可以使用标签将 UI 代码带入另一个布局文件并在您当前的布局中显示它,最后您将能够直接从当前的 Activity 或 Fragment 调用它,就像您对其他元素所做的那样Fragment 或 Activity 类的根。

重用布局

第一个布局文件名为: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 逻辑移动到新 View 元素的类中,例如,如果您想在信息发生某些事情时禁用该复选框,您可以将逻辑移动到新的视图类。

自定义视图

我不会写一个完整的教程,因为它是一个广泛的话题,但我会在其他地方留下一些例子来帮助你理解最基本的概念,有两种方法可以构建 CustomViews 第一个是扩展 View 类,这将迫使您从头开始创建它,但您也可以扩展其他 View,例如 LinearLayout,这将帮助您开始使用 CustomView 的概念(并非在每种情况下都推荐,它可能会减慢如果你不明智地使用它,你的 UI)

扩展 LinearLayout 的示例

扩展视图的示例


推荐阅读