Android TableLayout ligne d'en-Tête
Ok, j'ai donc eu cette TableLayout, et son plein de données avec toutes les lignes ajoutées par programmation. J'ai la TableLayout à l'intérieur d'un HorizontalScrollView, qui à son tour est à l'intérieur d'un ScrollView - cela me donne de défilement horizontale et verticale. Ce que j'essaie de faire maintenant est d'ajouter une ligne d'en-tête qui ne sera pas de défilement. J'ai essayé de déplacer des choses autour de sorte que deux de mes défiler les points de vue étaient en fait à l'intérieur de la TableLayout et en ajoutant le TableRows à la HorizontalScrollView; mon espoir était de pouvoir ensuite ajouter la ligne d'en-tête à l'extérieur de la faire défiler les vues.
La seule autre chose que je peux penser est d'avoir un deuxième tableau de mise en page juste pour la ligne d'en-tête, mais les colonnes de line-up semble que ce serait difficile. Des idées?
OriginalL'auteur Jeff Barger | 2009-11-09
Vous devez vous connecter pour publier un commentaire.
Une approche par l'incorporation d'un TableLayout dans un autre TableLayout de la ligne et de mettre de l'en-tête de la ligne précédente, comme ci-dessous. En alignant les données et l'en-tête nécessite la layout_width propriété de l'en-tête de Visualiser les objets et les données de l'Affichage des objets à être mis sur le même plongeon des valeurs. Aussi, le layout_weight propriété de l'intérieur de la TableLayout de Visualiser les objets doivent correspondre à son en-tête correspondant.
Maintenant, dans le code XML ci-dessous, j'ai mis 3 TextViews à l'intérieur de l'TableLayout en une seule ligne de correspondre avec les en-têtes de colonne. C'est juste pour montrer comment l'alignement peut être fait. Vous pouvez renseigner les données par programmation en gonflant une mise en page et de l'ajouter au moment de l'exécution.
Ses pas l'appui de défilement horizontale
OriginalL'auteur WindsurferOak
J'ai effectivement venu avec un autre décent moyen de le faire.
Il suffit de construire la table normalement avec la ligne d'en-tête sur la première ligne, à l'intérieur d'une orientation verticale LinearLayout. Ensuite, par programme à supprimer la première ligne, puis de l'ajouter en tant que premier enfant pour le LinearLayout. Cela a fonctionné comme un charme.
Edit: Cela fonctionne aussi sans avoir à spécifier statique de la largeur d'une colonne.
pouvez-vous développer? Peut-être avec un peu de code?
J'ai fait une ((ViewGroup)tableRow.getParent()).removeChild(tableRow); puis linearLayout.addView(tableRow); et alors qu'il a supprimé la ligne d'en-tête, il n'a pas l'afficher, ni at-il garder la largeur de la colonne. J'ai fait ce onCreate(). Peut-être qu'il a besoin d'être dans un autre emplacement.
Je pense que cela fonctionne parce que "Si un TableRow du parent n'est pas un TableLayout, le TableRow va se comporter comme une horizontale LinearLayout."
J'aime l'idée, mais malheureusement cela ne fonctionne pas du tout pour moi. L'en-tête des colonnes ont toujours ont toujours, à peu de largeur seulement et ne sont pas alignées avec les colonnes de données. Aurait été trop beau...
OriginalL'auteur khendricks
Je sais que la question est ancienne, mais elle a été la première, que Google m'a donné que j'ai eu le même problème. Et depuis je crois que j'ai trouvé une meilleure solution, je tiens à partager.
Idée: mettre le TableLayout (à l'intérieur de la ScrollView) dans RelativeLayout et de créer une superposition, qui tire le premier (en-tête) de la rangée au-dessus de tout.
Est ici layout.xml:
Et voici le code:
Le problème avec cette approche est qu'elle provoque une fuite de mémoire! On crée et ajoute une nouvelle fakeHeaderView à la tableWrapper sur chaque redraw (la liste enfant grandit et se développe comme on peut le vérifier avec le débogueur). Et - comme je l'ai appris à expérimenter avec cette - pour quelque étrange raison, on ne peut pas supprimer les anciennes instances ou encore le dernier ajout est pas bien établi et l'effet ne fonctionne pas! Tous les conseils sur qui?
OriginalL'auteur Oleg Skrypnyuk
Pour ceux qui ne sont pas heureux avec le fait d'avoir à définir à l'avance les tailles, j'ai trouvé un peu un hack qui fonctionne pour moi.
En gros, faire un tableau distinct pour le titre et le mettre sur votre table principale, mais avec le même Haut niveau de l'alignement, puis créer deux copies de la ligne de titre et après l'ajout de l'un à la table principale, ajouter les autres à la table de titre et la valeur de l'enfant de la vue layoutParams à la ligne, la forme de la table principale.
Voici mon exemple de base.
dans votre mise en page:
Lorsque vous ajoutez ensuite vos lignes:
OriginalL'auteur PeejWeej
Utiliser Deux tableLayout Un dans le ScrollView comme donner
android:stretchColumns="*"
puis créer une vision commune pour les Lignes et le plus important de mentionner
android:layout_width="0dp"
Maintenant en Activité
OriginalL'auteur Kapil Parmar