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

31
demandé sur Sameer Segal 2010-10-30 17:54:17

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.

58
répondu Savvas Dalkitsis 2017-03-11 16:00:30

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>
21
répondu Jeshurun 2013-11-13 16:17:38

Cela a fonctionné pour moi..

tableLayout.setColumnShrinkable(1,true);
7
répondu Inco Mob 2011-12-29 18:48:30
<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.

5
répondu Thomas V J 2012-03-28 11:49:28

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
répondu SteD 2010-10-30 14:21:01

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"
       />
0
répondu GrzesiekK 2010-11-04 12:59:03