2013-07-19 16 views
5

Sprawdziłem wiele odpowiedzi, ale żadna nie pomogła do tej pory.Margines na niestandardowy TextView

Próbuję rozszerzyć TextView z Androidem i ustawić margines tego niestandardowego widoku wewnątrz kodu, ponieważ mam zamiar utworzyć je na przyciskach i podobnych rzeczach. Zostaje dodany do LinearLayout. O to właśnie dostałem:

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

Brak oznak marginesu w dowolnym miejscu.

EDYCJA: Być może zechcę dodać, jeśli przypiszę wartość marginesu w xml, to działa.

Odpowiedz

14

Myślę, że problemem jest to, że do czasu staramy się dodać marżę layoutparams nie są jeszcze ustawione, dlaczego nie spróbujesz nadrzędnymi tę metodę w swojej klasie 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); 
     }; 

i usunąć kod masz w konstruktorze ten sposób margines będzie stosowana aż jesteśmy pewni, że mamy układ przedmiot na widok nadzieję, że to pomaga

Pozdrawiam!

+0

Yay! Tak naprawdę to zrobiliśmy, dzięki! Próbowałem czegoś podobnego wcześniej, ale z onFinishInflate, które nie działało. Czy wiesz, jak to jest po stronie wydajności? Czy lepiej dodać wartość boolowską, aby sprawdzić, czy ustawiliśmy ją już raz? – tom

+0

Nie sądzę, że jest to tak imponujący efekt, ale jeśli martwisz się o to, możesz dodać flagę, aby zrobić to tylko raz, jeśli chcesz ... –

+1

Myślę, że prawdopodobnie można by uciec po prostu modyfikując wymiary przeszedł do onLayout() (np. left + = leftMargin, right - = rightMargin, top + = topMargin, bottom - = bottomMargin, super.onLayout (zmieniony, lewy, górny, prawy, dolny)); – kcoppock

0

Musisz teraz dodać ten widok do aktualnie wyświetlanego layoutu. Brakuje kolejnego kroku. Więc teraz trzeba coś takiego:

currentlayout.addview(View); 
+0

Został dodany w formacie XML. Widzę widoki tekstu w moim LinearLayout, ale nie mają one żadnego marginesu. – tom