getActivity / ShapeView

Shape 支持在布局中直接定义啦,支持设置阴影,文字渐变色,状态选择器
Apache License 2.0
841 stars 79 forks source link

[建议]:对于 shape_strokeSize 这种类似属性可否给个默认大小 #73

Closed Heart-Beats closed 1 year ago

Heart-Beats commented 1 year ago

你觉得框架有什么不足之处?【必答】

大佬,你好,我在使用此库时,因为自己遇到这个问题所以提个小建议:

shape_strokeSize 这种属性目前来看应该是默认大小为 0 , 导致给 stroke 设置颜色时第一时间无法预览,从而让人产生是否该控件不支持 stroke 相关属性,再进行相关测试浪费时间。

shadow 这种属性我没使用到,但是我觉得应该默认 size 也是 0, 应该也无法直接预览。

issue 是否有人曾提过类似的建议?【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

你觉得该怎么去完善会比较好?【非必答】

当发现除 size 外其他属性存在时,是否支持默认大小对使用体验比较好?

getActivity commented 1 year ago

小伙子,不设置大小默认就是零,这个设计合情合理,至于你说的设置了颜色,但是没有设置大小,导致预览不出来,这个属于个人的使用问题,不是框架的本身问题,另外如果按照你说的,如果默认就给了边框大小,那么框架在绘制的时候,无论此时的边框颜色是什么,都是会把这部分边框大小算进去的,也就是会挤占原有空间的,这种设计本身就是不合理的。

Heart-Beats commented 1 year ago

大佬,对于 那么框架在绘制的时候,无论此时的边框颜色是什么,都是会把这部分边框大小算进去的 这点我不是很理解,我想要的效果是给默认边框大小,但不默认绘制,是否进行绘制根据是否设置了边框其他属性来决定,所以若无其他属性边框是不会进行绘制的,不会影响正常的绘制效果,但会提升用户的使用体验。

不然按你这种说法,其他的属性也没必要给个默认值,无法进行预览都是个人的使用问题。

getActivity commented 1 year ago

小伙子,我理解你说的,做到体验好的情况,就是边框大小默认就是没有值的,但是一旦设置了边框颜色,如果此时没有设置边框大小,就设置一个进去,我认为这样的实现是比较奇怪的,假设我就设置一个透明色进去,那么不就有了边框大小?

getActivity commented 1 year ago

如果是为了更好的开发体验,要改成这样比较奇怪的实现,我是没有办法接受的,站在普通的人视角来讲是对的,能省事情当然是极好的,但是站在程序员的视角,不应该把框架的逻辑设计得让人意想不到,除非真的有大用,这样会增加别人的出错的概率。没有设置边框大小就应该不展示,别人看到设置了属性但是没有生效,肯定会去看文档,是不是自己设置错了,现在很多框架和系统的 API 都是这样设计的,我设置颜色就真的只是颜色,而不会自动给你设置大小进去。

Heart-Beats commented 1 year ago

如果是为了更好的开发体验,要改成这样比较奇怪的实现,我是没有办法接受的,站在普通的人视角来讲是对的,能省事情当然是极好的,但是站在程序员的视角,不应该把框架的逻辑设计得让人意想不到,除非真的有大用,这样会增加别人的出错的概率。没有设置边框大小就应该不展示,别人看到设置了属性但是没有生效,肯定会去看文档,是不是自己设置错了,现在很多框架和系统的 API 都是这样设计的,我设置颜色就真的只是颜色,而不会自动给你设置大小进去。

“站在程序员的视角,不应该把框架的逻辑设计得让人意想不到” 我现在就是站在程序员的视角呀,首先我设置边框颜色肯定是希望可以看到边框,至于边框大小符不符合开发的要求,肯定会根据设计进行调整。而现在是我设置了颜色以及其他属性,就因为没设置边框大小,导致一切设置的属性都没生效,很容易怀疑是不是 bug?

就拿最简单的 TextView 来说,会出现我设置字体颜色,字体样式等属性,会因为没设置字体大小,就无法预览吗?

其实正常来说,自定义 View 里的每个属性都是有默认值的,只不过有些属性会对其他属性造成干扰,所以这些属性的初始值可能就是基本类型的初始值。 比如 ShapeView 里 StrokeSize 现在就是 0, 因 Stoke 这个属性比较特殊, 但将这个属性从 0 改为 1 并且只有其他属性设置时,才会实际生效, 并不会对开发者的使用产生出错概率。 你举的的那个透明色的例子,在我看来设计图上如果是透明色,开发者压根看不出来,再如果设计强调就是透明色, 那么可以问下设计是什么清奇的想法?

getActivity commented 1 year ago

不应该把框架的逻辑设计得让人意想不到

假设就按照你说的来做,我设置一下边框颜色,再设置一下边框大小,最后设置一下边框颜色,请问此时边框大小是多少?

getActivity commented 1 year ago

拿最简单的 TextView 来说,会出现我设置字体颜色,字体样式等属性,会因为没设置字体大小,就无法预览吗?

TextView 必须会使用到的属性有字体颜色和字体大小,这两个属性是 TextView 一定会用到的属性,但是边框颜色和边框大小并不是 ShapeDrawable 必须要用到的属性,有没有设置这两个属性对 ShapeDrawable 不会有太大影响,区别在这里。

Heart-Beats commented 1 year ago

不应该把框架的逻辑设计得让人意想不到

假设就按照你说的来做,我设置一下边框颜色,再设置一下边框大小,最后设置一下边框颜色,请问此时边框大小是多少?

我理解的应该就是设置的大小,因为设置的边框大小已经把默认的边框大小给覆盖了

Heart-Beats commented 1 year ago

拿最简单的 TextView 来说,会出现我设置字体颜色,字体样式等属性,会因为没设置字体大小,就无法预览吗?

TextView 必须会使用到的属性有字体颜色和字体大小,这两个属性是 TextView 一定会用到的属性,但是边框颜色和边框大小并不是 ShapeDrawable 必须要用到的属性,有没有设置这两个属性对 ShapeDrawable 不会有太大影响,区别在这里。

我举这个例子只是说明这两个属性对 TextView 的重要, 也就是希望使用 TextView 时一定有个字体颜色和字体大小, 边框颜色和边框大小并不是 ShapeDrawable 必须要用到的属性, 我也说过这个比较特殊。 从大佬上面的描述中,好像认为我的想法是根据边框颜色是否设置给个默认大小,根据边框大小是否设置给个默认颜色? 我最初的想法只有第一种,因为设计上边框颜色变化更多,如果两种都结合的话,貌似也可以实现,但在初始化时条件就会更复杂了。