2014-07-04 25 views
5

Ho il seguente layout, in cui i testi di modifica escono dallo schermo apparentemente senza motivo. Ho provato a trovare un problema simile ma non ho potuto. Dovrebbe essere facile ma ho provato molte cose senza fortuna.Modifica testo fuori dallo schermo con GridLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#ffffff" 
     android:columnCount="2" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/titleTextView" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:paddingBottom="10dp" 
      android:paddingTop="10dp" 
      android:text="dsgsdgsd" 
      android:textColor="@color/red" 
      android:textStyle="bold" /> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="2dip" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:background="@color/red" /> 

     <TextView 
      android:id="@+id/textTitle" 
      android:layout_gravity="left" 
      android:background="#ffffff" 
      android:paddingLeft="15dp" 
      android:text="Title" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editTitle" 
      android:layout_gravity="right" 
      android:inputType="text"> 
     </EditText> 

     <View 
      android:layout_height="1dip" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:background="#E6E6E6" /> 

     <TextView 
      android:id="@+id/textCategory" 
      android:layout_gravity="left" 
      android:background="#ffffff" 
      android:gravity="left" 
      android:paddingLeft="15dp" 
      android:text="Category" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editCategory" 
      android:layout_width="225dp" 
      android:layout_gravity="right" 
      android:inputType="text" />    

     <Button 
      android:id="@+id/btnCreateAccount" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="#ffffff" 
      android:onClick="createExpense" 
      android:text="Done" 
      android:textColor="@color/red" /> 
    </GridLayout> 

risposta

1

Controllare il codice aggiornato:

Ti mancavano alcuni attributi di larghezza, altezza e hai utilizzato match_parent in un elemento precedente come View, che impediva a qualsiasi elemento successivo di ottenere spazio sullo schermo.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#ffffff" 
     android:columnCount="2" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/titleTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:paddingBottom="10dp" 
      android:paddingTop="10dp" 
      android:text="dsgsdgsd" 
      android:textColor="@color/red" 
      android:textStyle="bold" /> 

     <View 
      android:layout_width="wrap_content" 
      android:layout_height="2dip" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:background="@color/red" /> 

     <TextView 
      android:id="@+id/textTitle" 
      android:layout_gravity="left" 
      android:background="#ffffff" 
      android:paddingLeft="15dp" 
      android:text="Title" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editTitle" 
      android:layout_gravity="right" 
      android:inputType="text" > 
     </EditText> 

     <View 
      android:layout_width="wrap_content" 
      android:layout_height="1dip" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:background="#E6E6E6" /> 

     <TextView 
      android:id="@+id/textCategory" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:background="#ffffff" 
      android:gravity="left" 
      android:paddingLeft="15dp" 
      android:text="Category" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editCategory" 
      android:layout_width="225dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:inputType="text" /> 

     <Button 
      android:id="@+id/btnCreateAccount" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="#ffffff" 
      android:onClick="createExpense" 
      android:text="Done" 
      android:textColor="@color/red" /> 
    </GridLayout> 

</LinearLayout> 

L'uscita senza colore e lo sfondo come mi dà errore dovuto alla risorsa che manca è:

enter image description here

Qui potete vedere entrambe le edittexts a schermo.

+0

ottimo, ha funzionato! Come posso posizionare il pulsante Fine al centro? Layout_gravity = center non funziona come può essere visto nella tua foto. – Rafag

+1

@Rafag che è dovuto al suo paret è il layout della griglia, se si mette quel pulsante fuori dalla griglia, si posizionerà al centro :) –

+0

risolto ora? @Rafag –

0

provare questo può essere questo aiuterà

<GridLayout 
    android:id="@+id/gridLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ffffff" 
    android:columnCount="2" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/titleTextView" 
     android:layout_columnSpan="2" 
     android:layout_gravity="left" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:paddingBottom="10dp" 
     android:paddingTop="10dp" 
     android:text="dsgsdgsd" 
     android:textColor="@color/red" 
     android:textStyle="bold" /> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="2dip" 
     android:layout_columnSpan="2" 
     android:layout_gravity="left" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:background="@color/red" /> 

    <TableRow android:id="@+id/tableRow1" > 

     <TextView 
      android:id="@+id/textTitle" 
      android:background="#ffffff" 
      android:paddingLeft="15dp" 
      android:text="Title" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editTitle" 
      android:layout_width="250dp" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="@dimen/activity_horizontal_margin" 
      android:layout_weight="1" 
      android:inputType="text" > 

      <requestFocus /> 
     </EditText> 

    </TableRow> 

    <View 
     android:layout_height="1dip" 
     android:layout_columnSpan="2" 
     android:layout_gravity="left" 
     android:background="#E6E6E6" /> 

    <TextView 
     android:id="@+id/textCategory" 
     android:layout_gravity="left" 
     android:background="#ffffff" 
     android:gravity="left" 
     android:paddingLeft="15dp" 
     android:text="Category" 
     android:textColor="@color/grey" /> 

    <EditText 
     android:id="@+id/editCategory" 
     android:layout_width="225dp" 
     android:layout_gravity="right" 
     android:inputType="text" />    

    <Button 
     android:id="@+id/btnCreateAccount" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:background="#ffffff" 
     android:onClick="createExpense" 
     android:text="Done" 
     android:textColor="@color/red" /> 
</GridLayout> 
0

Modifica la tua parte EditText a questo:

<EditText 
     android:id="@+id/editTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_column="0" 
     android:layout_gravity="center_horizontal|top" 
     android:layout_row="4" 
     android:ems="10" 
     android:inputType="text" /> 
0

Prova in questo modo, spero che questo ti aiuterà a risolvere il tuo problema.

<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:id="@+id/gridLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#ffffff" 
     android:columnCount="2" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/titleTextView" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:paddingBottom="10dp" 
      android:layout_row="0" 
      android:paddingTop="10dp" 
      android:text="dsgsdgsd" 
      android:textColor="@color/red" 
      android:textStyle="bold" /> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="2dp" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_marginLeft="20dp" 
      android:layout_row="1" 
      android:layout_marginRight="20dp" 
      android:background="@color/red" /> 

     <TextView 
      android:id="@+id/textTitle" 
      android:layout_gravity="left" 
      android:background="#ffffff" 
      android:paddingLeft="15dp" 
      android:layout_row="2" 
      android:layout_column="0" 
      android:text="Title" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editTitle" 
      android:layout_width="225dp" 
      android:layout_gravity="right" 
      android:layout_row="2" 
      android:layout_column="1" 
      android:inputType="text"> 
     </EditText> 

     <View 
      android:layout_height="2dp" 
      android:layout_columnSpan="2" 
      android:layout_gravity="left" 
      android:layout_row="3" 
      android:background="#E6E6E6" /> 

     <TextView 
      android:id="@+id/textCategory" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:background="#ffffff" 
      android:gravity="left" 
      android:layout_row="4" 
      android:layout_column="0" 
      android:paddingLeft="15dp" 
      android:text="Category" 
      android:textColor="@color/grey" /> 

     <EditText 
      android:id="@+id/editCategory" 
      android:layout_width="225dp" 
      android:layout_column="1" 
      android:layout_gravity="right" 
      android:layout_row="4" 
      android:inputType="text" /> 

     <Button 
      android:id="@+id/btnCreateAccount" 
      android:layout_width="match_parent" 
      android:layout_gravity="center" 
      android:background="#ffffff" 
      android:layout_row="5" 
      android:layout_columnSpan="2" 
      android:onClick="createExpense" 
      android:text="Done" 
      android:textColor="@color/red" /> 
    </GridLayout> 

</LinearLayout> 
0

In linea generale, non si può mai utilizzare wrap_content con EditText, sarà sempre prendere la dimensione del contenuto e non alle eventuali diverse confini, per cui un utente può sempre far saltare in aria un layout semplicemente digitando il testo eccessivo. Mi ci sono voluti anni per realizzare questa semplice osservazione di come Android assegna priorità a vari vincoli.

In questo contesto, quando un GridLayout decide che non può adattare una colonna all'interno dei suoi confini principali, si arrende e genera un risultato errato, quindi tipicamente abbiamo associato un GridLayout per larghezza dello schermo, la prima colonna che supera la larghezza sarà costretto fuori dallo schermo.

Se si desidera che i campi di immissione grandi e piccoli corrispondano alle dimensioni dei dati, il modo più semplice è definire colonne fittizie con pesi che possono essere utilizzati per occupare spazio sullo schermo o estese per campi più grandi.