JavaNoober / BackgroundLibrary

A framework for directly generating shape through Tags, no need to write shape.xml again(通过标签直接生成shape,无需再写shape.xml)
Apache License 2.0
3.84k stars 465 forks source link

DrawableCreator 1.7.x padding问题 #129

Closed ghost closed 3 years ago

ghost commented 3 years ago

isEmpty方法修改了实现,导致xml中设置了padding但是没有调用过DrawableCreator.setPadding的情况下if (!isEmpty(padding))会进入 把view原有的padding给全部置为0了,请问这个是需要以后都必须调用setPadding呢,还是isEmpty的判断有问题?应该是>=?

ghost commented 3 years ago

多数view没有动态Padding的需求,所以代码中没有调用过setPadding; 如果这样修改的话 会导致升级成本增加。

JavaNoober commented 3 years ago

理论上没有调用setPadding的时候也不会执行(!isEmpty(padding))里面的内容啊,看一下你的xml,和你设置drawable的代码呢

ghost commented 3 years ago

1.7.1 DrawableCreator类中 自定义了isEmpty方法: private static final boolean isEmpty(Rect rect) { return rect.left > rect.right || rect.top > rect.bottom; } 就因为没设置过setpadding 所以0>0||0>0 return了false 然后 if (!isEmpty(padding)) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { drawable.setPadding(padding.left, padding.top, padding.right, padding.bottom); } else { try { Field paddingField = drawable.getClass().getDeclaredField("mPadding"); if条件中 !false 进去了。

ghost commented 3 years ago

之前版本中用的是Rect类的isEmpty方法: /**

判断条件不同。

JavaNoober commented 3 years ago

1.7.2已经修复