Je me demandais s'il existait un moyen facile de supprimer du texte dans un widget d'application sous Android. Dans une activité normale, il est assez facile d’utiliser des drapeaux textview:
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Mais comme dans un widget d'application, je ne peux utiliser que des aperçus à distance ... Je ne sais pas si cela est possible
Quelqu'un sait quelque chose à ce sujet?
Merci!
Vous pouvez utiliser ceci:
remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
Bien entendu, vous pouvez également ajouter d'autres indicateurs de la classe Android.graphics.Paint.
Pour le faire par programme dans une vue 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);
Une autre façon de le faire par programme qui ressemble un peu moins à un hack que 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);
2015 Update: Mes amis, c'est pour les très anciennes versions d'Android. Voir d'autres réponses pour des solutions modernes!
Pour parcourir l’ensemble du texte, vous pouvez utiliser une image d’arrière-plan spécifique pour simuler l’effet de barré:
Android:background="@drawable/bg_strikethrough"
Où bg_strikethrough
drawable est un 9-patch qui garde une ligne continue au milieu, se développant de part et d'autre, avec tout le rembourrage que vous jugez raisonnable. J'en ai utilisé un comme celui-ci:
(agrandi pour plus de clarté .. 1300%!)
C'est ma version HDPI, alors sauvegardez-la (la première http://i.stack.imgur.com/nt6BK.png ) sous le nom res/drawable-hdpi/bg_strikethrough.9.png
et la configuration fonctionnera comme suit:
Si vous avez un seul mot, nous pouvons utiliser drawable . Voici l'exemple:
<item Android:state_pressed="false"><shape Android:shape="line">
<stroke Android:width="2dp" Android:color="#ffffff" />
</shape>
</item>
si vous avez plusieurs lignes, vous pouvez utiliser le code suivant:
TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG)
Pour ce faire, vous pouvez utiliser cette
title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
et pour enlever vous pouvez utiliser cette
title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
Pour TextView multiligne, 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);
C'est vraiment facile si vous utilisez des chaînes:
<string name="line"> Not crossed <strike> crossed </strike> </string>
Et puis juste:
<TextView
...
Android:text="@string/line"
/>
Ajouter la ligne ci-dessous: -
TextView tv=(TextView) v.findViewById(Android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
utilisez votre référence au lieu de "tv"
essayez ce code
textview.setText((Html.fromHtml("<strike>hello world!</strike>")));
J'ai essayé quelques options mais, cela fonctionne mieux pour moi:
String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));
à votre santé
Voici une extension pour tous les gens de Kotlin
fun TextView.showStrikeThrough(show: Boolean) {
paintFlags =
if (show) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}
Utilisation
textView.showStrikeThrough(true)
Limitation
Les barrés ne peuvent avoir que la même couleur que le texte
(c'est-à-dire que le texte rouge et le texte barré en bleu ne sont pas possibles)
vous ajoutez dans:
TextView variableTv = (TextView) findViewById(R.id.yourText);
vous définissez/ajoutez dans votre variable:
variableTv.setText("It's Text use Style Strike");
puis ajoutez .setPaintFlags dans variableTv:
variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
créer un drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="false">
<shape Android:shape="line">
<stroke Android:width="1dp"
Android:color="@color/onePlusRed" />
</shape>
</item>
</selector>
et l'utiliser comme premier plan.Android:foreground="@drawable/strike_through"
Je sais, je réponds à une vieille question, cela pourrait être utile pour quelqu'un d'autre, pour supprimer par programmation une partie particulière de TextView.
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("Text need to be set here", TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) textView.getText();
spannable.setSpan(new StrikethroughSpan(), 5, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
Ainsi, dans cet exemple de code, 5 correspond à la position de départ et 8 à la fin, la position du texte doit être supprimée. Ainsi, après avoir exécuté ce code, nous pouvons obtenir le texte "besoin" avec le texte barré. J'espère que ça aidera pour quelqu'un d'autre.
Les ressources Android ont de très bonnes performances Prise en charge des balises HTML
Les éléments HTML ci-dessous sont pris en charge:
Bold: <b>, <em>
Italic: <i>, <cite>, <dfn>
25% larger text: <big>
20% smaller text: <small>
Setting font properties: <font face=”font_family“ color=”hex_color”>. Examples of possible font families include monospace, serif, and sans_serif.
Setting a monospace font family: <tt>
Strikethrough: <s>, <strike>, <del>
Underline: <u>
Superscript: <sup>
Subscript: <sub>
Bullet points: <ul>, <li>
Line breaks: <br>
Division: <div>
CSS style: <span style=”color|background_color|text-decoration”>
Paragraphs: <p dir=”rtl | ltr” style=”…”>
Notez cependant qu'il n'est pas rendu dans l'aperçu des mises en page de studio Android. Dernière test sur Android Studio 3.3.1
Par exemple, le barré va ressembler à ça:
<string name="cost"><strike>$10</strike> $5 a month</string>