Comment est StaticLayout utilisé dans Android?
J'ai besoin de construire ma propre TextView
j'ai donc appris sur le StaticLayout
pour dessiner du texte sur une toile. C'est préférable à l'utilisation de Canvas.drawText()
directement, ou si l' la documentation dit. Toutefois, la documentation ne donne pas d'exemples sur la manière de le faire. Il n'y a qu'une vague référence à StaticLayout.Builder
être la nouvelle façon de faire.
J'ai trouvé un exemple ici mais il semble un peu daté.
J'ai finalement fonctionné bien comment faire, alors j'ajoute mon explication ci-dessous.
Vous devez vous connecter pour publier un commentaire.
StaticLayout
(similaire àDynamicLayout
etBoringLayout
) est utilisé pour la mise en et de dessiner du texte sur une toile. Il est couramment utilisé pour les tâches suivantes:TextView
).TextView
lui-même utilise uneStaticLayout
en interne.La mesure de la taille du texte
Seule ligne
Si vous n'avez qu'une seule ligne de texte, vous pouvez le mesurer avec
Paint
ouTextPaint
.Multiligne
Cependant, si il y a retour à la ligne et vous avez besoin de la hauteur, alors il est préférable d'utiliser un
StaticLayout
. Vous fournir la largeur et ensuite, vous pouvez obtenir la hauteur de laStaticLayout
.Nouvelle API
Si vous souhaitez utiliser la plus récente
StaticLayout.Builder
(disponible à partir de l'API 23), vous pouvez obtenir votre mise en page comme ceci:Vous pouvez fixer sur plus de paramètres à l'aide de la notation point:
L'écriture d'un texte sur une image
Je développerai peut-être ce plus dans l'avenir, mais pour l'instant, voir ce post pour un exemple d'une méthode qui utilise
StaticLayout
et renvoie une image bitmap.Faire un texte personnalisé de la manipulation de Vue
Voici un exemple d'un affichage personnalisé à l'aide d'un
StaticLayout
. Il se comporte comme un simpleTextView
. Lorsque le texte est trop long pour tenir sur l'écran, automatiquement la ligne continue et augmente sa hauteur.Code
MyView.java
activity_main.xml
Notes
Cette, cette, et cette ont été utiles dans l'apprentissage de la façon de faire un texte personnalisé de la manipulation de vue.
Voir Création d'une Vue de Classe si vous souhaitez ajouter des attributs personnalisés qui peuvent être définies à partir du code ou xml.
Voici mon explication pour la rédaction de texte multiligne sur la toile.
Déclarer la Peinture de l'objet. Utilisation TextPaint qui est une extension de Peinture.
Initialiser la Peinture de l'objet. Définir votre propre couleur, la taille, etc.
Ajouter getTextHeight fonction
dans votre fonction onDraw mettre les lignes suivantes comme ce
Courtoisie va à KOC post