2015-03-24 11 views
8

Sto cercando di fare una forma di griglia simile, simile a the example on the official Android Developers blog.colonna GridLayout sta andando oltre i suoi limiti

Ecco il mio layout:

<?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> 

La mia colonna di sinistra (testo statico, destra allineato) sta funzionando bene. Allinea il testo a destra e la larghezza dipende dalla riga più larga.

Tuttavia, la colonna di destra sembra disegnare fuori dai limiti del GridLayout.

Layout preview with GridLayout selected

In questo quadro, la scatola blu è i limiti della GridLayout. Puoi già vedere il problema nella barra verde in alto. Si suppone che il lato destro si fermi ai limiti del GridLayout (come il lato sinistro), ma per qualche motivo lo sta superando.

Layout preview with right column selected

La scatola blu in quella foto è dei limiti della EditText (è impostato su wrap_content). Tuttavia, la scatola colorata aqua è il limite in cui è permesso espandersi. Quando digito un sacco di personaggi in EditText, passa oltre i limiti di GridLayout e anche oltre il bordo dello schermo del telefono!

Screenshot

Si tratta di un bug in GridLayout? O mi sta sfuggendo qualcosa?

+0

Hai già trovato una soluzione? – marienke

risposta

0

È possibile limitare edittext a linea singola.

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

Estende ancora i limiti a destra, quindi questo non risolve il problema. –

0

Definitivamente dispari. Cosa succede se vincoli la larghezza di EditText a "match_parent" invece di "wrap_content" (che dovrebbe vincolare la sua larghezza orizzontale all'interno della cella della griglia)?

cioè

 <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" /> 

o, in alternativa, dare al vostro EditText un margine destro per cercare di spingere quel bordo destro a mano in un po '? per esempio.

android:layout_marginRight="20dp" 

e vedere se questo fa la differenza?

+2

Cambiarlo in 'match_parent' ha ancora lo stesso problema di overflow, l'unica differenza è che inizia ad essere più ampia dello schermo. –

+2

Il margine lo aggiusta, ma è hacky e dovrà essere controllato per ogni traduzione delle stringhe nella prima colonna. Sicuramente non è una buona soluzione. –

6

Questo è 'normale' comportamento di GridLayout.

Fortunatamente, v'è una nuova versione di GridLayout, che è stato aggiunto con API 21. Grazie di questo fatto, si può fare GridLayout accoglie i bambini al suo la larghezza o l'altezza secondo che il suo orientamento.

Per conoscere i dettagli guardano documentation, soprattutto in Class Sommario -> L'eccesso di spazio di distribuzione. Potete trovare lì informazioni su come utilizzare GridLayout nel modo desiderato.


Suggerimento:

Non dimenticate che a fare uso di nuove GridLayout, è necessario add it as support library e in xml s si dovrebbe usare:

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

invece di

<GridLayout ... > 
+2

aggiungendo il supporto griglialayout non porta soluzione. ci sono attributi specifici che dovremmo impostare? –

2

I trovato this answer per essere utile. Inoltre, la risposta di paulina_glab dell'uso di <android.support.v7.widget.GridLayout invece di solo <GridLayout - grazie!

In particolare questi attributi su ogni cella:

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

Speranza che aiuta.

Problemi correlati