如何在按钮

时间:2018-04-15 14:06:17

标签: android android-drawable android-button layerdrawable

我正在努力更好地了解图层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没有预定义的大小?如果是这种情况,我试图在盒子上手动设置绑定,但也没有太多运气。

任何人都可以帮我理解我做错了吗?

2 个答案:

答案 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

希望这会有所帮助。