【问题标题】:Avoid duplicating UI codes避免重复 UI 代码
【发布时间】:2018-06-19 02:00:48
【问题描述】:

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

保留单独的 UI 类(通过复制 GridBagConstraints 和其他东西)或将通用代码移入抽象层并导出对实现级别的 UI 元素?

【问题讨论】:

  • 这个问题非常主观。您需要权衡两种解决方案的优缺点。您重复使用任何代码的可能性有多大?更改第一个实现的代码将如何影响它?它是否使代码在长期错误中更可重用?

标签: java user-interface code-duplication


【解决方案1】:

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

  1. 您可以使用标签将 UI 代码带入另一个布局文件并在当前布局中显示它,最后您可以像使用Fragment 或 Activity 类的根中的其他元素。

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

Custom View

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

Example extending LinearLayout

Example extending View

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多