Est-il possible d'obtenir la coordonnée x d'un caractère dans un TextView sous Android? Je ne cherche pas les coordonnées du TextView lui-même, j'ai besoin de la coordonnée du dernier caractère du TextView (multi-lignes)
Merci d'avance
3 Réponses :
Utilisation :
layout.getPrimaryHorizontal(int offset)
C'est simple à utiliser. Vous parcourez simplement la mise en page en utilisant la longueur du texte qu'elle utilise.
Il renverra le x du caractère. Donc, les lignes que je reçois toujours de layout.getLineTop ()
. Au fait, si vous utilisez layout.getLineTop ()
, notez qu'il y a un comportement étrange, peut-être un bogue.
Voici comment obtenir les coordonnées x
et y
d'un caractère spécifique. offset
est l'index du caractère souhaité dans la chaîne de textView. Ces coordonnées sont relatives au conteneur parent
fun TextView.charLocation(offset: Int): Point? { layout ?: return null // Layout may be null right after change to the text view val lineOfText = layout.getLineForOffset(offset) val xCoordinate = layout.getPrimaryHorizontal(offset).toInt() val yCoordinate = layout.getLineTop(lineOfText) return Point(xCoordinate, yCoordinate) }
Si vous prévoyez de l'utiliser plus d'une fois:
Layout layout = textView.getLayout(); if (layout == null) { // Layout may be null right after change to the text view // Do nothing } int lineOfText = layout.getLineForOffset(offset); int xCoordinate = (int) layout.getPrimaryHorizontal(offset); int yCoordinate = layout.getLineTop(lineOfText);
REMARQUE: Pour vous assurer que la mise en page est non nulle , vous pouvez appeler
textview.post (() -> {/ * obtenir les coordonnées * /}) en Java ou
textview.post {/ * obtenir les coordonnées * /}
en Kotlin
Étant donné un intervalle qui a un ou plusieurs paragraphes, essayez d'obtenir le dernier caractère de l'étendue entière ne fonctionne pas. Existe-t-il un autre moyen d'obtenir le même résultat avec getPrimaryHorizontal ()?
Copie possible de Trouver les coordonnées exactes d'un seul caractère à l'intérieur d'un TextView