2013-07-19 13 views
5

geprüft ich viele Antworten, aber keine half bisher.Margin auf benutzerdefinierte Textview

Ich versuche Android Textview und stellen Sie den Rand dieser benutzerdefinierten Ansicht in den Code zu erweitern, wie ich sie auf den Knopf drückt und ähnliche Dinge instanziiert werde. Es wird einem LinearLayout hinzugefügt. Das ist, was ich habe:

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); 
    } 
} 

Keine Spur von Marge überall.

EDIT: Ich könnte hinzufügen möchten, wenn ich einen Randwert in xml zuweisen, es funktioniert.

Antwort

14

Ich denke, das Problem ist, dass Sie durch die Zeit versuchen, die Marge die layoutparams eingestellt sind noch nicht hinzuzufügen, warum nicht Sie versuchen, das Überschreiben dieser Methode in Ihrer ResultsView Klasse :

für die Ansicht den Code, den Sie in den Konstruktor haben, auf diese Weise die Marge angewendet werden, bis wir sicher sind, haben wir ein Layout-Objekt
 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); 
     }; 

und entfernen, hoffen, dass diese

Grüße hilft!

+0

Yay! Das hat es wirklich geschafft, danke! Ich habe vorher schon etwas ähnliches versucht, aber mit onFinishInflate, was nicht funktioniert hat. Weißt du, wie gut das auf der Leistungsseite ist? Soll ich besser einen Boolean hinzufügen, um zu prüfen, ob wir ihn schon einmal gesetzt haben? – tom

+0

Ich glaube nicht eine so große leistungs Auswirkungen, aber wenn Sie Sorge darüber sind, können Sie die Fahne fügen Sie es nur einmal zu tun, wenn Sie wollen ... –

+1

Ich glaube, Sie wahrscheinlich weg mit nur Modifizierung der Dimensionen bekommen könnte in onLayout() übergeben (zB links + = leftMargin, rechts - = rightMargin, top + = topMargin, bottom - = bottomMargin, super.onLayout (geändert, links, oben, rechts, unten)); – kcoppock

0

Sie müssen nun diese Ansicht auf das Layout hinzuzufügen, die gerade angezeigt wird. Du verpasst den nächsten Schritt. So, jetzt müssen Sie so etwas wie:

currentlayout.addview(View); 
+0

Es ist in XML hinzugefügt. Ich kann die Textansichten in meinem LinearLayout sehen, aber sie haben keinen Rand. – tom