我制作了一个九补丁和一个自定义视图组,然后我将该视图组的背景设置为九补丁。
问题是:九个补丁忽略了“内容区域”的设置。
那么:如何在自定义视图中正确使用九补丁?
或者:
我如何从九个补丁中获取内容区域,以便可以在 OnMeasure 和 OnLayout 数学上使用它?
我制作了一个九补丁和一个自定义视图组,然后我将该视图组的背景设置为九补丁。
问题是:九个补丁忽略了“内容区域”的设置。
那么:如何在自定义视图中正确使用九补丁?
或者:
我如何从九个补丁中获取内容区域,以便可以在 OnMeasure 和 OnLayout 数学上使用它?
还在 NinePatchDrawable 上使用 boolean getPadding(Rect padding) 来获取内容的填充(您的内容 + 9patch 填充 = 总组大小)
您可能需要通过覆盖其 onDraw 方法直接在 ViewGroup 上绘制对象:
public void onDraw(Canvas canvas) {
NinePatchDrawable bg = (NinePatchDrawable) resources.getDrawable(id);
if (bg != null) {
bg.setBounds(0, 0, getWidth(), getHeight());
bg.draw(canvas);
}
}
在 onMeasure 中获取背景的填充以减小可用宽度(这是用于在网格中布置单元格):
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable background = getBackground();
Rect padding = new Rect();
if (background != null && background.getPadding(padding));
int width = MeasureSpec.getSize(widthMeasureSpec);
int availableWidth = width - padding.left - padding.right;
对于 onLayout,应用填充:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int availableWidth = r - l - getPaddingLeft() - getPaddingRight();