147 votes

Existe-t-il un moyen simple de barrer le texte dans un widget d'application ?

Je me demandais s'il existait un moyen simple de frapper du texte dans un widget d'application sous Android. Dans une activité normale, c'est assez facile, en utilisant les drapeaux de textview :

textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

Mais comme dans un widget d'application, je ne peux utiliser que les remoteviews... Je ne sais pas si c'est possible

Quelqu'un sait-il quelque chose à ce sujet ?

Merci !

202voto

ruhalde Points 1160

Pour le faire de manière programmatique dans une vue de texte, non testé dans d'autres vues >>.

TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

80voto

BoD Points 3490

Une autre façon de le faire par programme qui ressemble un peu moins à un piratage que la méthode Paint :

Au lieu de faire :

tv.setText(s);

faire :

private static final StrikethroughSpan STRIKE_THROUGH_SPAN = new StrikethroughSpan();
...
tv.setText(s, TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) tv.getText();
spannable.setSpan(STRIKE_THROUGH_SPAN, 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

72voto

agirardello Points 225

Vous pouvez utiliser ceci :

remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);

Bien sûr, vous pouvez également ajouter d'autres drapeaux de la classe Android.graphics.Paint.

59voto

ohhorob Points 6994

Pour barrer l'ensemble de la vue du texte, vous pouvez utiliser une image de fond spécifique pour simuler l'effet de barré :

android:background="@drawable/bg_strikethrough"

Où le bg_strikethrough drawable est un patch 9 qui maintient une ligne solide au milieu et qui s'agrandit de part et d'autre, avec tout le rembourrage que vous jugez raisonnable. J'en ai utilisé un comme ça :

alt text

(agrandi pour plus de clarté 1300% !)

alt text

C'est ma version HDPI, donc enregistrez-la (la première) http://i.stack.imgur.com/nt6BK.png ) comme res/drawable-hdpi/bg_strikethrough.9.png et la configuration fonctionnera comme suit :

alt text

9voto

user3768270 Points 31

Pour les TextView multilignes, vous devez utiliser Android.text.style.CharacterStyle comme ceci :

SpannableString spannable = new SpannableString(text);
spannable.setSpan(new StrikethroughSpan(), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
remoteViews.setTextViewText(R.id.itemText, spannable);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X