自定义控件

Android 重构:自定义协议

2020-09-03  本文已影响0人  prime_809c

项目中遇到了这样一个问题:

产品中存在多种药态:饮片、水丸、膏方、粉剂、蜜丸等等。

不同的药态对应不同的服用规则,规则中红色的数字是可以编辑的,且有默认值,服用规则有如下几种:

切换药态时,服用规则同步切换。

1、普通思路:

创建一个布局文件xml,观察规则,添加 5 个TextView和 4 个EditView,就可以覆盖所有的可能性,然后在每个class中单独赋值即可。

这样有几种弊端:

a,代码量大:需要判断每个药态,然后给每个View进行赋值。

b,灵活性低:如果产品端准备加一个药态,需要添加判断条件。

2、自定义协议:

下图是这种方式的核心思路,试一试在只看这一行代码的情况下,能不能想到是如何做到的。

在每个可编辑的数字两侧添加“#”,自定义了一个协议。创建一个自定义ViewGroup,继承自FlexboxLayout(可以对ChildView自动换行),然后setValue:

使用这种方式,不仅大大省去了各种判断,而且扩展性强,代码具有非常强的可读性。

对协议还可以依据产品规则进行扩充,比如在项目中,需要对剂量的输入进行监听,我们可以这样做

然后修改setValue的代码:

上一篇下一篇

猜你喜欢

热点阅读