2011-04-26 5 views
10

J'ai défini la TextView suivante:Android Comment se débarrasser de la marque de la question à la fin de ellipsize

<TextView 
    android:id="@+id/textview_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:layout_alignParentTop="true" 
    android:layout_marginRight="25dip" 
    android:ellipsize="end"/> 

Et comme prévu, le texte est coupé si elle est trop longue et remplacé par « ... » . Mais à la fin des trois points apparaît un point d'interrogation entouré d'un carré.

Comment puis-je me débarrasser de ce point d'interrogation?

Merci!

+0

Quel texte placez-vous dans le TextView? On dirait une erreur d'encodage – blindstuff

Répondre

35

Pour me citer one of my books:

classe Android TextView a la capacité intégrée au texte « ellipsize », tronquer et en ajoutant des points de suspension si le texte est plus long que l'espace disponible. Vous pouvez l'utiliser via l'attribut android:ellipsize, par exemple. Cela fonctionne plutôt bien, du moins pour le texte sur une seule ligne.

L'ellipse utilisée par Android n'est pas trois périodes. Il utilise plutôt un ellipse réelle , où les trois points sont contenus dans un seul glyphe. Par conséquent, toute police que vous utilisez et que vous utilisez également la fonctionnalité "ellipsizing" aura besoin du glyphe de l'ellipse . Au-delà de cela, Android rembourse la chaîne qui est affichée sur l'écran, de sorte que la longueur (en caractères) est la même avant et après "ellipsizing". Pour que cela fonctionne, Android remplace un caractère par l'ellipse et remplace tous les autres caractères supprimés par le caractère Unicode 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF). Cela signifie que les caractères "supplémentaires" après que les points de suspension ne prennent aucun espace visible sur l'écran , mais ils peuvent faire partie de la chaîne.

Cependant, cela signifie que toutes les polices personnalisées que vous utilisez pour TextView widgets que vous utilisez avec android:ellipsize doit également prendre en charge ce caractère spécial Unicode . Toutes les polices ne le font pas, et vous obtiendrez des artefacts dans la représentation de vos chaînes raccourcies si votre police ne possède pas ce caractère (par exemple, les X voyants apparaissent à la fin de la ligne).

+0

Oh mec, j'aurais dû lire l'intégralité du livre ;-) Merci pour cette astuce! – GabrielWeis

+1

@GabrielWeis: Hah! J'ai choisi de faire la citation, simplement parce que c'est une douleur à expliquer, et je n'ai pas envie de l'écrire à nouveau. En supposant que vous ayez le droit de jouer avec votre fichier de police, quelqu'un avec un éditeur de polices (et l'expertise pour en utiliser un) devrait pouvoir ajouter ce glyphe. – CommonsWare

+0

@CommonsWare: Merci pour l'explication, mais dans mon cas je vois ces artefacts sur un HTC Hero (2.1) mais pas sur un Nexus One (2.2 ou supérieur) ni sur un Samsung Galaxy S (2.2 ou supérieur).Si c'est un problème de police, pourquoi? –

9

Avait le même problème. Quelqu'un avec la connaissance de FontForge a fixé le U + FEFF dans mes polices personnalisées et maintenant elles fonctionnent bien. Voici comment il a décrit ce qu'il a fait:

"Je ne suis pas bon avec Fontforge, donc j'ai triché.À la base, ouvert la police dans Fontforge, sélectionné le caractère espace, ctrl + c pour copier, puis sélectionné FEFF, ctrl + v pour coller, puis menu Metrics-> Set Width et mettre à zéro, puis File-> Generate Fonts. "

+0

merci, je l'ai réparé en utilisant ce conseil –

Questions connexes