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?
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.
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:
TableLayout
corresponde à la vue parent entière sur un périphérique à grand écranvous 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>
Cela a fonctionné pour moi ..
tableLayout.setColumnShrinkable(1,true);
<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.
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"
/>
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>