2013-07-19 295 views
5

我檢查了很多答案,但目前爲止沒有任何幫助。自定義TextView的邊距

我試圖擴展android的TextView,並在代碼中設置這個自定義視圖的邊距,因爲我要在按鈕按下和類似的東西上實例化它們。它被添加到LinearLayout。這是關於我得到的:

public class ResultsView extends TextView { 
    public ResultsView(Context context) { 
     super(context); 
     LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     layout.setMargins(15, 15, 15, 15); 
     setLayoutParams(layout); 
    } 
} 

任何地方都沒有保證金的跡象。

編輯:我可能想要添加,如果我在xml中分配一個邊距值,它確實有效。

回答

14

我認爲這個問題是,你的時間嘗試添加的LayoutParams都還沒有設置保證金,你爲什麼不嘗試重寫此方法在你ResultsView類:

 protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
      MarginLayoutParams margins = MarginLayoutParams.class.cast(getLayoutParams()); 
      int margin = 15; 
      margins.topMargin = margin; 
      margins.bottomMargin = margin; 
      margins.leftMargin = margin; 
      margins.rightMargin = margin; 
      setLayoutParams(margins); 
     }; 

,並刪除您在構造有代碼,這樣的利潤率將被應用,直到我們確信我們有一個佈局對象的觀點,希望這有助於

商祺!

+0

耶!這真的做到了,謝謝!實際上我曾嘗試過類似的方法,但是使用onFinishInflate,這並不奏效。你知道這在演出方面有多好嗎?我應該更好地添加一個布爾值來檢查我們是否已經設置了一次? – tom

+0

我不認爲這是一個巨大的表演影響,但如果你擔心它,你可以添加標誌只做一次,如果你想... –

+1

我認爲你可以逃脫只是修改尺寸傳入onLayout()(例如,left + = leftMargin,right - = rightMargin,top + = topMargin,bottom - = bottomMargin,super.onLayout(changed,left,top,right,bottom)); – kcoppock

0

您現在需要將此視圖添加到當前正在顯示的佈局中。你錯過了下一步。 所以,現在你需要的東西,如:

currentlayout.addview(View); 
+0

它以XML添加。我可以在LinearLayout中看到textviews,但它們沒有空白。 – tom