web-dev-qa-db-fra.com

Android Largeur de la disposition de la table

J'ai deux colonnes TableLayout comme seul enfant d'une vue de défilement. La première colonne contient TextViews ('étiquettes') et la deuxième colonne contient EditText/Spinner/DateWidget etc ('valeurs'). Même si j'ai spécifié Android:layout_width="fill_parent" pour TableLayout, TableRow & tous les widgets (dans la colonne 'valeurs').

L'écran est parfait lorsque l'activité est créée. Cependant, quand on tape une très longue valeur dans le EditText, la colonne 'values' va au-delà de la zone d'écran visible.

Comment puis-je résoudre ce problème?

32
Sameer Segal

Vous souhaiterez peut-être définir la taille des colonnes à l'aide d'un poids. Vous définissez donc la hauteur de la disposition du tableau pour remplir le parent, mais pour chaque colonne, vous devez définir la largeur sur "0px" et le poids sur le pourcentage que vous souhaitez que la colonne s'étende. Donc, en supposant que vous vouliez que la première colonne soit à 30% de la largeur de l'écran, vous définissez son poids à "0,3" et la deuxième colonne à "0,7".

Essayez-le et voyez si cela fonctionne.

58
Savvas Dalkitsis

La manière pragmatique de résoudre ce problème consiste à utiliser les attributs stretchColumns et shrinkColumns dans TableLayout. Leurs valeurs doivent être des index de colonnes basés sur 0.

Par exemple, si vous avez une disposition de table à deux colonnes et:

  • Vous souhaitez que la deuxième colonne se remplisse d'espace vide (étirement) afin que le TableLayout corresponde à la vue parent entière sur un périphérique à grand écran
  • Vous souhaitez que la première colonne soit réduite (et son contenu éventuellement enveloppé/ellipsé) sur un petit écran

vous définiriez votre TableLayout comme:

<TableLayout
    Android:id="@+id/my_table_layout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:stretchColumns="1"
    Android:shrinkColumns="0" >
</TableLayout>
24
Jeshurun

Cela a fonctionné pour moi ..

tableLayout.setColumnShrinkable(1,true);
7
Inco Mob
<TableLayout 
Android:layout_height="fill_parent" 
Android:layout_width="fill_parent"
Android:layout_marginLeft="5dp"
Android:layout_marginRight="5dp">
<TableRow 
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<TextView 
Android:layout_width="wrap_content"
Android:text="Name " 
Android:layout_height="fill_parent">
</TextView>
<EditText 
Android:layout_width="0dp"
Android:layout_weight="1"
Android:hint="name"
Android:layout_height="wrap_content" 
>
</EditText>
</TableRow>
</TableLayout>

Ce code a fonctionné pour moi pour aligner la vue texte sur la première colonne et modifier le parent de remplissage de texte.

5
Thomas V J

J'ai rencontré un problème similaire avec EditText sur Android 2.2. Dans mon cas, l'ajout de la propriété Android: maxWidth = "0sp" a aidé. Le champ EditText s'affiche maintenant comme je le souhaitais - il est donc toujours de la même taille comme les autres champs EditText, mais en plus, il n'est pas redimensionné lorsque du texte long est entré.

Voici ma définition EditText:

<EditText Android:id="@+id/extra_edit"
       Android:padding="3dip"
       Android:inputType="textImeMultiLine"
       Android:maxWidth="0sp"
       Android:layout_width="fill_parent"
       />
0
GrzesiekK

Essayez ceci, assurez-vous que Android:singleLine="false" et Android:inputType="textMultiLine":

<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent" Android:layout_height="fill_parent"
    Android:stretchColumns="1">
    <TableRow Android:layout_height="wrap_content"
        Android:layout_width="fill_parent">

        <TextView Android:text="Label:" />
        <EditText Android:id="@+id/entry" Android:inputType="textMultiLine"
            Android:layout_width="wrap_content" Android:layout_height="wrap_content"
            Android:singleLine="false" />
    </TableRow>
</TableLayout>
0
SteD