web-dev-qa-db-fra.com

Existe-t-il un moyen simple de supprimer du texte dans un widget d'application?

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!

123
Antonio

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.

53
agirardello

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);
175
ruhalde

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);
76
BoD

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"

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:

alt text

(agrandi pour plus de clarté .. 1300%!)

alt text

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:

alt text

59
ohhorob

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)
19
Akshay Mukadam

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));
19
pavel

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);
10
user3768270

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"
 />
8
Ignacio Alorre

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"

8

essayez ce code

textview.setText((Html.fromHtml("<strike>hello world!</strike>")));
1
Abhishek c

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é

1
Milos Simic Simo

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)

0
Michael

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);
0
Briliant Fay

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"

0
Akshay More

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.

0
Ram Koti

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>
0
Ilya Gazman