2010-11-10 12 views
11

Czy ktoś próbował napisać własną implementację ViewGroup z kilkoma tekstowymi widokami?TextView gravity

Mam problem, że TextViews w takiej implementacji nie szanuje właściwości grawitacji TextView.setGravity(Gravity.CENTER), a tekst jest umieszczony w lewym górnym rogu.

Czy ktoś może mi pomóc dowiedzieć się, dlaczego?

EDIT:

Ok. nieważne, już to wymyśliłem.

Jeśli enyone jest zainteresowany, to metoda tylko nadpisałeś onMeasure() (dla wszystkich moich TextView) i zmieniono wezwanie od super.onMeasure() do setMeasuredDimension(int, int) i grawitacji zaczął pracować normalnie.

Zasadniczo, w moim niestandardowy układ używam następujące klasy, aby wyświetlić tekst:

private static class GravityTextView extends TextView { 

    public GravityTextView(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); 
    } 

} 
+0

Fajnie, dzięki za udostępnienie! –

+0

Dzięki za udostępnienie! Uwaga, musiałem również wywołać miarę z onLayout na TextViews też. Tak więc nadrzędny MeasureMance jak wyżej i wywołanie miary. –

+0

Spróbuj ustawić grawitację układu liniowego/względnego –

Odpowiedz

3

to nie jest złe zachowanie są po prostu próbuje ustawić niewłaściwą usługę.

W przypadku ustawienia TextView.setGravity(Gravity.CENTER) ustawia się wagę zawartości TextView.

To, czego szukasz, to layout_gravity.

+0

Dokładnie to próbuję zrobić. Jeśli na przykład mój widok tekstowy znajduje się w losowej lokalizacji w moim układzie niestandardowym, a zajmuje on 200 pikseli miejsca, a tekst w nim jest tylko 50 pikseli, chcę, aby tekst był wyrównywany w środku tego widoku tekstu (więc tekst będzie nadal zachowają przestrzeń 200px, ale tekst znajdzie się w środku, co sprawi, że 75px pominie granicę między tekstem a faktycznym tekstem). –