我製作了九個修補程序和一個自定義視圖組,然後我將該視圖組的背景設置爲九個修補程序。自定義視圖組上的九個修補程序
問題是:九補丁忽略「內容區域」設置。
所以:我如何在自定義視圖中正確使用九個補丁?
OR:
如何搶我對9補丁的內容區域,所以我可以用它在OnMeasure和OnLayout數學?
我製作了九個修補程序和一個自定義視圖組,然後我將該視圖組的背景設置爲九個修補程序。自定義視圖組上的九個修補程序
問題是:九補丁忽略「內容區域」設置。
所以:我如何在自定義視圖中正確使用九個補丁?
OR:
如何搶我對9補丁的內容區域,所以我可以用它在OnMeasure和OnLayout數學?
還可以使用布爾getPadding(矩形填充),以獲得填充的內容(內容+ 9patch填充=總組dize)
您可能需要直接通過重寫它的onDraw方法繪製對象上的ViewGroup:在NinePatchDrawable
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();
神聖的撫慰蝙蝠俠! – speeder 2013-03-26 21:43:38
完全正確的awnser,謝謝:)太糟糕的Android文檔吸引人,並沒有正確解釋。 – speeder 2011-06-01 19:18:24