我正在努力更好地了解图层drawables如何在drawable(s)按钮中工作。
我正在尝试绘制2个简单的彩色框,其中一个没有插图,以便填充整个按钮可绘制区域。还有一个插图。
ColorDrawable background1 = new ColorDrawable(Color.BLUE);
ColorDrawable background2 = new ColorDrawable(Color.GREEN);
Drawable[] drawables = new Drawable[] {
background1,
background2
};
LayerDrawable ld = new LayerDrawable(drawables);
ld.setLayerInset(0, 0, 0, 0, 0 ); // no inset on white box
ld.setLayerInset(1, 8, 8, 8, 8 ); // 8 inset on all side on green box
// set the left drawable on the button
button.setCompoundDrawablesWithIntrinsicBounds(ld, null, null, null);
然而,这根本不起作用。第一个问题是盒子没有填满任何区域。是因为按钮drawables没有预定义的大小?如果是这种情况,我试图在盒子上手动设置绑定,但也没有太多运气。
任何人都可以帮我理解我做错了吗?
答案 0 :(得分:0)
在Drawable中创建一个特定设计,并在xml
中调用后台按钮答案 1 :(得分:0)
现在ColorDrawable
的问题是确定drawable边界的getIntrinsicWidth()/getIntrinsicHeight()
默认为-1,因此它不会在屏幕上呈现。在您的情况下,有用的是扩展ColorDrawable
并覆盖构造函数的高度和宽度。
以下是一个示例:
class CustomDrawable(color: Int, val h: Int, val w: Int): ColorDrawable(color) {
override fun getIntrinsicHeight(): Int {
return h
}
override fun getIntrinsicWidth(): Int {
return w
}
}
然后你可以实例化这个而不是像ColorDrawable
那样
val background1 = CustomDrawable(Color.BLUE, dimensionInPx , dimensionInPx)
val background2 = CustomDrawable(Color.GREEN, dimensionInPx, dimensionInPx)
确保在传递这些值之前将dp转换为px
希望这会有所帮助。