2011-06-01 52 views
4

我製作了九個修補程序和一個自定義視圖組,然後我將該視圖組的背景設置爲九個修補程序。自定義視圖組上的九個修補程序

問題是:九補丁忽略「內容區域」設置。

所以:我如何在自定義視圖中正確使用九個補丁?

OR:

如何搶我對9補丁的內容區域,所以我可以用它在OnMeasure和OnLayout數學?

回答

6

還可以使用布爾getPadding(矩形填充),以獲得填充的內容(內容+ 9patch填充=總組dize)

+0

完全正確的awnser,謝謝:)太糟糕的Android文檔吸引人,並沒有正確解釋。 – speeder 2011-06-01 19:18:24

0

您可能需要直接通過重寫它的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); 
    } 
} 
+0

這樣做並不能解決問題。 – speeder 2011-06-01 17:14:39

+0

你是說你嘗試過它,它不工作?它應該,假設你在調用getDrawable()時提供了正確的id() – rob 2011-06-01 18:07:58

0

獲取背景的填充在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(); 
+0

神聖的撫慰蝙蝠俠! – speeder 2013-03-26 21:43:38