java - 避免重复 UI 代码
问题描述
我想编写包含复选框和标签的新 UI 类。目前存在具有相同元素的现有 UI 类,但它们的元素描述不同。但是两个 UI 的数据模型将是相同的。
那么,为每个类保留单独的 UI 类(通过复制 GridBagConstraints 和其他东西)或将公共代码移动到抽象层并在实现级别导出 UI 元素的描述是一种好的做法吗?
解决方案
还有一些其他的事情你可以尝试,这样你就可以避免重复 UI 代码,我会给你 2 个例子:
- 您可以使用标签将 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 文件中声明的一样,因此您将能够重用它。
- 第二个是创建一个 View 元素,这比第一个方法有一个额外的优势,但有点复杂,你可以将一些 UI 逻辑移动到新 View 元素的类中,例如,如果您想在信息发生某些事情时禁用该复选框,您可以将逻辑移动到新的视图类。
我不会写一个完整的教程,因为它是一个广泛的话题,但我会在其他地方留下一些例子来帮助你理解最基本的概念,有两种方法可以构建 CustomViews 第一个是扩展 View 类,这将迫使您从头开始创建它,但您也可以扩展其他 View,例如 LinearLayout,这将帮助您开始使用 CustomView 的概念(并非在每种情况下都推荐,它可能会减慢如果你不明智地使用它,你的 UI)
推荐阅读
- python - 在 Python 的 C func 中,浮点变量的格式不正确
- r - 用 mutate_at 替换值总是给出行数不匹配的错误,如何解决这个问题?
- css - webpack HtmlWebpackPlugin 不会创建链接 css 标签
- c# - c# 正则表达式只匹配每个句子的第一个匹配项
- java - 将错误消息从控制器传递到百里香叶
- c# - 从云端到内部网络的信号
- wix - 在安装和主要升级时卸载不同的产品
- c# - 是否应该将同步 API 调用包装到异步中?
- r - 将 SpatialPointsDataFrame 写入形状文件会产生错误 rgdal::writeOGR : Non-unique field names
- java - 如何修复 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“name”的 bean 时出错?