2010-08-03 9 views
0

J'essaye de créer une feuille de base dans mon application en utilisant un TableLayout. La première rangée contient les titres de chaque colonne. Chaque ligne par la suite est une donnée. Je voudrais que les données soient défilables tout en gardant la première rangée du titre visible (c'est-à-dire que la première rangée ne défilerait pas avec le reste).En-têtes TableLayout & Column défilants

J'ai essayé quelque chose comme ce qui suit (sans succès):

<TableLayout> 
    <TableRow> 
    <!-- The headers --> 
    <TextView android:text="Header #1"/> 
    <TextView android:text="Header #2"/> 
    <TextView android:text="Header #3"/> 
    </TableRow> 

    <ScrollView> 
    <!--The rest of the data --> 
    <TableRow> 
    <TableRow> 
    ... 
    </ScrollView> 
</TableLayout> 

Cela provoque un plantage du programme. D'autres suggestions?

Répondre

1

Il se bloque car vous ne pouvez avoir que TableRow s comme descendants directs dans un TableLayout.

Ce que vous voulez probablement utiliser est un ListView et un 'en-tête' au-dessus.

Exemple (non complet):

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
> 
    <TextView 
     android:id="@+id/header1" 
     android:layout_weight="1" 
    /> 
    <TextView 
     android:id="@+id/header2" 
     android:layout_weight="1" 
    /> 
    <TextView 
     android:id="@+id/header3" 
     android:layout_weight="1" 
    /> 
</LinearLayout> 
<ListView 
    android:layout_width="fill_parent" 
... 
/> 

La clé est le layout_weight="1" et le android:layout_width="fill_parent" qui vous donnera 3 vues de taille égale. Vous devrez ensuite créer un Adapter et dans votre disposition personnalisée fournie par le Adapter faire la même chose pour les vues enfant. Vous devrez peut-être bricoler légèrement avec le rembourrage/les marges pour qu'ils s'alignent horizontalement exactement.

+0

J'ai essayé quelque chose de similaire. Je vais donner un autre coup le matin et vous laisser savoir comment il s'est avéré. – dfetter88

+0

D'accord, il semble que j'ai réussi à faire quelque chose. Une autre question: existe-t-il un moyen de manipuler 'layout_weight' pour que l'une des colonnes soit un peu plus large que les autres? (peut-être 1,25x plus large que les autres colonnes ferait l'affaire). – dfetter88

+0

La définition du poids de la disposition à une valeur inférieure (telle que 0,75) a fait l'affaire. Marquage comme résolu. – dfetter88

1

Vous n'avez pas besoin d'avoir tablerow en tant que descendant direct, il se bloque parce que scrollview accepte un seul enfant. mettre un autre tablelayout dans scrollview et y mettre des rangées.

0

Utilisation de la RelativeLayout fois ScrollView et TableLayout alignés vers le haut, et peuplant les deux TableLayouts avec la même première ligne peut faire un tour.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 
    <ScrollView 
      android:id="@+id/tabscrvie" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      > 
      <TableLayout 
       android:id="@+id/gridview" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       > 

     </TableLayout> 
    </ScrollView> 
    <TableLayout 
      android:id="@+id/headergridview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@id/tabscrvie" 
      > 
    </TableLayout> 
</RelativeLayout>