Android TableLayout Largeur
J'ai un TableLayout à deux colonnes comme seul enfant d'une vue de défilement. La première colonne contient TextViews ('labels') et la seconde colonne contient EditText/Spinner/DateWidget etc ('values'). Même si j'ai spécifié android: layout_width="fill_parent" pour TableLayout, TableRow et tous les widgets (dans la colonne' Valeurs').
, L'écran semble parfait lorsque l'activité est créée. Cependant, lorsque l'on tape une valeur très longue dans EditText, la colonne 'values' va au-delà de la zone d'écran visible.
Comment puis-je aborder cela?
Merci
6 réponses
Vous pouvez définir les tailles des colonnes en utilisant un poids. Ainsi, vous définirez la hauteur de la disposition de la table pour remplir le parent, mais pour chaque colonne, vous devez définir la largeur sur " 0px " et le poids sur le pourcentage que vous voulez que la colonne couvre. Donc, en supposant que vous voulez la première colonne à 30% de la largeur de l'écran, vous définissez son poids pour "0.3" et la deuxième colonne pour "0.7".
Essayez-le et voyez si cela fonctionne.
La façon 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) de sorte que
TableLayout
s'adapte à l'ensemble de la vue parent sur un périphérique grand écran - vous souhaitez que la première colonne soit réduite (et son contenu éventuellement enveloppé / ellipsized) sur un petit écran dispositif
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>
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 de texte sur la première colonne et éditer le parent de remplissage de texte.
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>
J'ai eu un problème similaire avec EditText sur Android 2.2. Dans mon cas, l'ajout de la propriété android:maxWidth="0sp" a aidé. Maintenant, le champ EditText est affiché comme je le voulais - il est donc toujours de la même taille que les autres champs EditText, mais 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"
/>