Comment puis-je créer une table avec des frontières dans Android?
- Je utiliser un tableau de mise en page pour afficher des données sous forme de tableau, mais je veux une table définies par l'utilisateur avec des colonnes et des lignes avec des frontières. Des Suggestions?
Vous devez vous connecter pour publier un commentaire.
Ma solution pour ce problème est de mettre un xml drawable ressource sur le champ de fond de chaque cellule. De cette manière, vous pouvez définir une forme avec la bordure que vous souhaitez pour toutes les cellules. Le seul inconvénient est que les frontières de l'extrême cellules ont la moitié de la largeur de l'autres, mais il n'est pas un problème si votre table remplit l'écran entier.
Un Exemple:
drawable/cell_shape.xml
layout/my_table.xml
Edit: Un exemple
Edit2: un Autre exemple (avec des éléments plus: cercle des coins, des dégradés...)
J'ai expliqué ce problème avec plus de détails dans http://blog.intelligenia.com/2012/02/programacion-movil-en-android.html#more. Il est en espagnol, mais il y a certains codes et des images de plus de tableaux complexes.
view.setBackground(?)
Je suis d'accord avec Brad. C'était une terrible réponse. Le Android documentation indique que TableLayout conteneurs de ne pas afficher les lignes frontalières, afin de les envoyer à l'Android site de coutume de les aider un peu. J'ai été en mesure de trouver un "sale" solution sur droidnova, qui consiste à mettre une couleur de fond pour le TableLayout, puis à définir une couleur de fond différente pour les TableRow et l'ajout de layout_margin à la ligne. Je ne suis pas fan de cette solution, mais il fonctionne pour la ligne des frontières. Je suppose que vous pourriez faire la même chose avec les éléments de la composition de chaque "cellule", mais je n'ai pas vérifié.
Un exemple semblable à celui sur DroidNova:
TableRow
objet?SI vous êtes juste essayer d'avoir une ligne entre les lignes (par exemple, juste au-dessus d'une ligne "Total"), alors il existe une solution facile - il suffit d'ajouter un TableRow avec une couleur de fond et une layout_height comme ceci:
Ensemble
android:layout_height="1px"
ou cependant vous voulez épaisseur à la frontière. Remplissez autant de vide TextView de colonnes que vous avez besoin pour correspondre au reste de votre table, ou tout simplement utiliser l'une avecandroid:layout_span
comme je l'ai démontré.La sortie devrait ressembler à quelque chose comme ceci:
Si vous essayez d'ajouter plus compliqué frontières puis de l'autre des réponses déjà postées sont plus appropriés.
TextView
lorsque vous pouvez utiliser unView
à la place? Aussi il n'est pas recommandé de spécifier exact de pixels. Utilisation dp/sp au lieu. Voir aussi ce fil: stackoverflow.com/questions/2025282/....Ce que je voulais est un tableau comme celui
J'ai ajouté ceci dans mon styles.xml :
Ensuite dans mon disposition de table :
Vous pouvez également le faire progamatically, plutôt que via un fichier xml, mais c'est un peu plus "hackish". Mais donner à un homme sans options, et vous lui laissez pas le choix :p.. Voici le code:
Ici, j'ai conçu la liste par la suite à la conception de l'image. Mon listitem nom de fichier est Propertylistitem.xml et cellborder.xml est utilisé drawable pour la forme de la cellborder de sortie, dans cette image. nécessaire de code que j'ai ajouté ici.
FileName:propertylistitem.xml
filename:cellborder.xml
Ici, je veux juste seulement de la frontière dans ma conception, j'ai donc mis en commentaire la couleur solide tag.
De faire 1dp effondrement-bordure autour de chaque cellule sans avoir à écrire du code java et sans créer un autre xml de mise en page avec
<shape...>
balise, vous pouvez essayer cette solution:Dans
<TableLayout...>
ajouterandroid:background="#CCC"
etandroid:paddingTop="1dp"
etandroid:stretchColumns="0"
Dans
<TableRow...>
ajouterandroid:background="#CCC"
etandroid:paddingBottom="1dp"
etandroid:paddingRight="1dp"
Dans chaque cellule/enfant dans TableRow, c'est à dire
<TextView...>
ajouterandroid:background="#FFF"
etandroid:layout_marginLeft="1dp"
Il est très important de suivre les rembourrages et les marges, tel que décrit. Cette solution permettra de dessiner un 1dp frontière aka border-collapse de la propriété en (X)HTML/CSS.
Couleur d'arrière-plan dans
<TableLayout...>
et<TableRow...>
représente une ligne de bordure et la couleur de fond dans<TextView...>
remplit une cellule de tableau. Vous pouvez mettre un peu de rembourrage dans les cellules si nécessaire.Un exemple est ici:
Après de longues recherches et heures de l'essayer c'est le code le plus simple que je pourrais faire:
tv est un TextView avec un texte simple et le contenu de mon conteneur (LinearLayout dans ce Cas).
C'est un peu plus facile.
setBackgroundDrawable()
peut être utilisé à la place.Bien que peut inspirer d'u
Ces étapes montrent comment créer bordé tableau dynamiquement
voici la vue de la table
et voici la ligne à utiliser "attrib_row.xml"
et nous pouvons ajouter ce fichier xml pour drawable pour ajouter une bordure à notre table "border.xml"
et enfin, voici le code compact écrit dans Kotlin mais il est facile de le convertir en java si vous avez besoin d'
bien temps est un tableau de la liste contiennent des données:
ArrayList<Double>()
et vous pouvez l'utiliser dans votre fragment, par exemple comme ceci
le résultat final ressemble à ceci
Comment sur la substitution de la méthode onDraw puis peindre les lignes sur la toile?
J'ai utilisé cette solution: dans
TableRow
, j'ai créé pour chaque celluleLinearLayout
avec la ligne verticale et réelle de la cellule en elle, et après chaqueTableRow
, j'ai ajouté une ligne horizontale.Regardez le code ci-dessous:
Espère que ça va aider.
Ici est un excellent moyen de résoudre ce problème:
Créer un rectangle dessiné avec des coins arrondis comme ceci:
de l'enregistrer dans le dossier drawable avec le nom rounded_border.xml
Puis créer une relative mise en page qui utilise le rounded_border comme arrière-plan comme ceci:
enregistrer dans votre mise en page de dossier et nommez-le table_with_border.xml
alors à chaque fois que vous besoin d'une telle table de tirer dans un affichage à l'aide de la syntaxe ressemble à ceci:
Vous voulez probablement ajouter quelques espacement autour des bords - donc, juste wrap de l'inclure dans un LinearLayout et ajouter un peu de rembourrage autour des bords.
Simple et facile pour obtenir une jolie bordure autour d'une table.
Le coup double sur le middel sections, j'ai utilisé cette couche de liste drawable:
Je pense qu'il est préférable de créer 1px neuf-patch de l'image, et l'utilisation showDividers attribut dans TableRow et TableLayout, car ils sont à la fois LinearLayouts
Une frontière entre les cellules est doublé dans les réponses ci-dessus.
Donc, vous pouvez essayer cette solution:
Je sais que c'est une vieille question ... de toute façon ... si vous voulez garder votre xml simple et sympathique, vous pouvez étendre TableLayout et remplacer dispatchDraw de faire quelques dessin personnalisé.
Ici est un moyen rapide et sale de mise en œuvre qui dessine un rectangle autour de la table de la vue ainsi que les horizontales et les verticales des barres:
exemple de xml avec la troisième colonne de l'habillage du texte:
Une autre solution est d'utiliser linéaire mises en page et définissez les séparations entre les lignes et les cellules comme ceci:
C'est une solution sale, mais il est simple et fonctionne également avec un fond transparent et de frontières.