2015-03-24 15 views
8

Próbuję złożyć formularz siatkowej, podobny do the example on the official Android Developers blog.kolumna GridLayout dzieje poza jego granicami

Oto mój plan:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="48dp" 
     android:layout_marginRight="48dp" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:columnCount="2" 
     android:rowCount="2"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="0" 
      android:layout_gravity="end" 
      android:layout_row="0" 
      android:text="Send" 
      android:textColor="?android:attr/textColorPrimary" 
      android:textSize="24sp" /> 

     <Spinner 
      android:id="@+id/send_currency" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="1" 
      android:layout_row="0" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="0" 
      android:layout_gravity="end" 
      android:layout_row="1" 
      android:text="to" 
      android:textColor="?android:attr/textColorPrimary" 
      android:textSize="24sp" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="1" 
      android:layout_row="1" 
      android:hint="username" 
      android:textColor="?android:attr/textColorPrimary" 
      android:textSize="24sp" /> 
    </GridLayout> 
</LinearLayout> 

Moja lewa kolumna (tekst statyczny, prawy- wyrównane) działa poprawnie. Wyrównuje tekst w prawo, a szerokość zależy od najszerszego rzędu.

Jednak prawą kolumnę wydaje się rysować daleko poza granicami GridLayout.

Layout preview with GridLayout selected

W tym obrazie, blue box jest Granice GridLayout. Możesz już zobaczyć problem na zielonym pasku u góry. Prawa strona powinna zatrzymywać się na granicy GridLayout (tak jak lewa strona), ale z jakiegoś powodu dzieje się znacznie dalej.

Layout preview with right column selected

Niebieska skrzynka w tym obrazie jest Granice EditText (jest ustawiony na wrap_content). Jednak pole w kolorze aqua to granice, w których można się rozwijać. Kiedy wpisuję wiele znaków w EditText, przechodzi on poza granice GridLayout, a nawet poza krawędź ekranu telefonu!

Screenshot

Jest to błąd w GridLayout? Czy może czegoś brakuje?

+0

Czy znalazłeś już rozwiązanie? – marienke

Odpowiedz

0

Możesz ograniczyć edittext do pojedynczej linii.

<EditText 
... 
android:singleLine="true" 
android:lines="1" 
android:maxLines="1" 
android:hint="to"></EditText> 
+2

Nadmiernie przekracza zasięg w prawo, więc to nie rozwiązuje problemu. –

0

Zdecydowanie dziwne. Co się stanie, jeśli ograniczysz szerokość EditText do "match_parent" zamiast "wrap_content" (które powinno ograniczyć jego szerokość poziomą do komórki siatki)?

tj

 <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_column="1" 
     android:layout_row="1" 
     android:hint="username" 
     android:textColor="?android:attr/textColorPrimary" 
     android:textSize="24sp" /> 

lub, alternatywnie, dać EditText prawy margines, aby spróbować i przesunąć tę granicę prawą dłoń na trochę? na przykład

android:layout_marginRight="20dp" 

i sprawdź, czy to ma znaczenie?

+2

Zmiana na 'match_parent' nadal ma ten sam problem z przepełnieniem, jedyna różnica polega na tym, że zaczyna się od ekranu szerszego. –

+2

Margines to naprawia, ale jest hacky i będzie musiał być sprawdzony dla każdego tłumaczenia ciągów w pierwszej kolumnie. Zdecydowanie nie jest to dobre rozwiązanie. –

6

To jest "normalny" zachowanie GridLayout.

Na szczęście pojawiła się nowa wersja GridLayout, który został dodany z API 21. Dzięki tej rzeczywistości, można dokonać GridLayout pomieścić dzieci do swojej albo szerokość lub wysokość zależności jak jego orientacji.

Aby poznać szczegóły spojrzeć na documentation, zwłaszcza w Klasa Przegląd -> Nadmiar powierzchni dystrybucyjnej. Możesz tam znaleźć informacje, jak używać GridLayout w sposób, w jaki chcesz.


Wskazówka:

Nie zapomnij, że do korzystania z nowej GridLayout trzeba add it as support library aw xml s należy użyć:

<android.support.v7.widget.GridLayout ... > 

zamiast

<GridLayout ... > 
+2

dodanie obsługi gridlayout nie przynosi rozwiązania. czy istnieją określone cechy, które powinniśmy ustawić? –

2

I znaleźć this answer, aby być pomocnym. Ponadto, odpowiedź paulina_glab na użycie <android.support.v7.widget.GridLayout zamiast tylko <GridLayout - dzięki!

W szczególności te atrybuty w każdej komórce:

android:layout_width="0dp" 
app:layout_columnSpan="1" 
app:layout_columnWeight="1" 
app:layout_rowSpan="1" 

Nadzieję, że to pomaga.