更新背景边界

时间:2014-05-01 00:36:57

标签: android background android-custom-view

我试图更新EditText视图的背景边界,以便最终结果类似于这样......

+----------------+
|  Empty Space   |
|                |
| +------------+ |
| | Background | |
| +------------+ |
+----------------+

我目前的方法是获取onLayout中的背景并简单地更新边界......

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
  super.onLayout(changed, left, top, right, bottom);
  ...
  getBackground().setBounds(newLeft, newTop, newRight, newBottom);
}

但是,这根本不起作用。边界正在应用,但是当它绘制时,它不会改变。我最接近的是改变onDraw中的界限,然而,它最初将被绘制在它的原始位置,然后立即被重新绘制到它的位置。新职位......我怎样才能可靠地改变背景界限?

1 个答案:

答案 0 :(得分:2)

经过一些研究,我能够解决这个问题的唯一方法是创建一个中间Drawable(中间人)并将所有公共方法委托给实际的Drawable。然后覆盖setBounds以设置我想要的任何值...

public class MyCustomView extends EditText {

  @Override
  public void setBackground(Drawable background) {
    super.setBackground(new IntermediaryDrawable(background));
  }

  ...

  private class IntermediaryDrawable extends Drawable {
    private Drawable theRealDrawable;

    public IntermediaryDrawable(Drawable source) {
      theRealDrawable = source;
    }

    @Override
    public void setBounds(int left, int top, int right, int bottom) {
      theRealDrawable.setBounds(left, 100, right, bottom);
    }

    ...
  }
}

非常hacky。如果有人遇到更好的解决方案,请分享。