我试图更新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
中的界限,然而,它最初将被绘制在它的原始位置,然后立即被重新绘制到它的位置。新职位......我怎样才能可靠地改变背景界限?
答案 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。如果有人遇到更好的解决方案,请分享。