2011-06-23 10 views
5

Próbuję utworzyć układ z trzema widokami tekstu obok siebie. Odsyłacze mają różną długość.Utwórz widok tekstowy o równej szerokości z rzędu

Wszystko, co chcę zrobić, to ustawić je tak, aby zawsze miały taką samą szerokość układu, niezależnie od długości tekstu.

Podejścia Próbowałem:

1) Próbowałem za pomocą linear_layout i ustawienie wagi TextView się 1, ale to nie robi tego, ponieważ odnosi się tylko do pozostałej szerokości po wszystkich TextView są umieszczone.

2) Próbowałem również przy użyciu układu tabeli i rozciągania wszystkich kolumn za pomocą stretchColumns = "*". ale to również przydziela wymaganą szerokość do długości tekstów i dopiero wtedy rozciąga kolumny.

3) To jest haker, ale to też nie działa. Próbowałem mieć liniowy układ we względnym układzie z trzema widokami tekstu, aby nie mieć tekstu, ale zmusić je do równej szerokości, ustawiając ich ciężary. Działa to, ale chcę, aby moje następne widoki, które są w układzie względnym, dopasować się do prawej i lewej krawędzi widoków w układzie liniowym. Ale to nie działa. Oto mój układ, który wykorzystałem do tego.

 <RelativeLayout 
      android:layout_width="fill_parent" android:layout_height="fill_parent" > 
      <!-- This is a hack to have all three textviews in a row to obtain equal width --> 
      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
       <TextView android:id="@+id/tv_ref1" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
       <TextView android:id="@+id/tv_ref2" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
       <TextView android:id="@+id/tv_ref3" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My ghghhfghjjghjkkhgfhfghfjhjh" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
      </LinearLayout> 


      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center" 
       android:text="Text Text Text" 
       android:textColor="@color/white" /> 
      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center_horizontal" 
       android:text="Med" 
       android:textColor="@color/white" /> 
      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center" 
       android:text="Long Text wtwy yu hjsyi" 
       android:textColor="@color/white" /> 

     </RelativeLayout> 

Proszę dać mi znać, co mogę robić źle i jak mogę zmusić moje TextView z rzędu, aby mieć równe szerokości.

Dziękuję.

Odpowiedz

22

ustawień layout_width do „fill_parent” i layout_weight na „1” dla wszystkich TextEdits zmusza je mieć jednakową szerokość

+0

To nie działa. Próbowałem tego. Daje większą szerokość tekstu, który jest dłuższy niż pozostałe teksty. – achie

+0

jeśli szerokość_zespołu wynosi "opakuj zawartość", tak; jeśli jest to "fill_parent" - nie. spróbuj –

+0

Ahh moje złe. Tak to działa. Nawet wyś wietlenia tekstowe w Linelayout w ramach relacyjnego playouta w kodzie mojego układu również leżĘ ... tak, że działa on z fill_parent lub 0dp dla wszystkich wyś wietleń tekstowych. Może również działać, jeśli ustawimy szerokość wszystkich widoków tekstowych na takie same. Dziękuję Ci. – achie

0

Dlaczego nie użyjesz atrybutu właściwości w postaci max width. Ustawić go sama dla wszystkich TextView oznacza 20 lub 30dip

+0

Cóż, nie zawsze można powiedzieć, że TextView będzie od tej długości. Innym problemem, z którym mamy do czynienia przy użyciu tego podejścia, jest obsługa wielu gęstości ekranu, orientacji i rozmiarów ekranu. Nie chcę tworzyć oddzielnego pliku układu dla każdego współczynnika ekranu i ustawić różne maksymalne szerokości dla każdego z tych widoków. Wolałbym użyć jednego układu i sprawić, by działał we wszystkich przypadkach. Dziękujemy za pomoc. – achie

0

przede wszystkim używać:

xmlns:android="http://schemas.android.com/apk/res/android" 

dla układu głównego, a następnie sprawdź i zmodyfikuj powyższy kod podczas powtarzania textView po zamknięciu LinearLayout, co nie jest konieczne, jak myślę.

+0

Układ względny to nie mój układ główny. Tak więc wykonuję deklarację przestrzeni nazw w moim układzie głównym. Układ liniowy jest zamknięty, ponieważ powinien być zamknięty. Teksty w tym układzie są po prostu hackowaniem, a jeśli zadziała, ustawię ich wysokość na 0 dp. – achie

+0

Dlaczego użyłeś trzech widoków tekstowych zaraz po zamknięciu linelayoutu. wpływają one na układ TextViews w LinearLayout. po prostu je usuń i sprawdź, czy będzie działało dobrze, inaczej je odpowiednio ułóż. –

+0

Nie, to nie w porządku. Teksty poza układem liniowym nie wpływają na układ widoków tekstu w układzie liniowym. I nie powinni tego robić, a oni tego nie robią. Przetestowałem mój kod. – achie

0

uzyskać maksymalną szerokość między wszystkimi TextView i ustawić tę szerokość do wszystkich TextView

@Override 
     public void onWindowFocusChanged(boolean hasFocus) { 
      // TODO Auto-generated method stub 
      super.onWindowFocusChanged(hasFocus); 
      // System.out.println("...111Height..."+mainLayout.getMeasuredHeight()); 

      width1 = textView1.getWidth(); 
    width2 = textView2.getWidth(); 
    width3 = textView3.getWidth(); 


    //get maximum width among all width 
    int[] nums={width1 ,width2 ,width3}; 
    Arrays.sort(nums); 
    int max = nums[nums.length-1]; 

    //set this maximum value to all the textviews 

    textView1.setWidth(max); 
    textView2.setWidth(max); 
    textView3.setWidth(max); 

    } 
Powiązane problemy