Frage

Ich habe mich gefragt, ob es eine einfache Möglichkeit, Text in einem App-Widget in Android zu schlagen. In einer normalen Aktivität, ist es ziemlich einfach, mit Textview Fahnen:

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

Da aber in einem App-Widget, ich nur remoteviews verwenden kann ... Ich weiß nicht, ob dies möglich ist

Wer weiß etwas über diese?

Danke!

War es hilfreich?

Lösung

Sie können diese verwenden:

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

Natürlich können Sie auch andere Flaggen aus der Klasse android.graphics.Paint hinzuzufügen.

Andere Tipps

Um es zu tun programmatisch in einem Textview, ungetestet in anderen Ansichten >>

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

Eine andere Möglichkeit, es programmatisch zu tun, die weniger ein bisschen aussieht wie ein Hack ist als die Farbe Art und Weise:

Statt tun:

tv.setText(s);

tun:

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: Leute, das ist für sehr alte Versionen von Android. Andere Antworten für moderne Lösungen!


durch die gesamte Textansicht zu schlagen, können Sie ein bestimmtes Hintergrundbild verwenden, um den Schlageffekt zu simulieren:

android:background="@drawable/bg_strikethrough"

Wenn die bg_strikethrough ziehbar ist ein 9-Patch, der eine durchgezogene Linie durch die Mitte hält, auf beiden Seiten wächst, mit jedoch viel Polsterung denken Sie, ist vernünftig. Ich habe eine so benutzten:

  

alt text

(vergrößertes für Klarheit .. 1300%!)

  

alt text

Das ist meine HDPI Version, so speichern sie (die erste http: //i.stack .imgur.com / nt6BK.png ) als res/drawable-hdpi/bg_strikethrough.9.png und die Konfiguration, wie sie so funktioniert:

  

alt text

Für diese Weise können Sie diese

verwenden
 title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

und entfernen können Sie diese verwenden

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

Wenn Sie nur ein einziges Wort haben, können wir verwenden ziehbar. Nachfolgend ist das Beispiel:

<item android:state_pressed="false"><shape android:shape="line">
        <stroke android:width="2dp" android:color="#ffffff" />
    </shape>
</item>

wenn Sie mehrere Zeilen haben, können Sie den folgenden Code verwenden:

TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG)

Für mehrzeilige Textview Sie android.text.style.CharacterStyle wie folgt verwenden sollte:

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

Es ist wirklich einfach, wenn Sie Zeichenfolgen verwenden:

<string name="line"> Not crossed <strike> crossed </strike> </string>

Und dann nur:

<TextView 
        ...
         android:text="@string/line"
 />

Fügen Sie die folgende Zeile: -

TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

verwenden Ihre Referenz anstelle von "tv"

versuchen, diesen Code

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

Hier ist eine Erweiterung für alle Sie Kotlin Leute

fun TextView.showStrikeThrough(show: Boolean) {
    paintFlags =
            if (show) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
            else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}

Verwendung

textView.showStrikeThrough(true)

Begrenzung

Streichungen können nur die gleiche Farbe wie der Text

(d. Red Text und blau durchgestrichener ist nicht möglich)

erstellen ziehbar

<?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>

und verwenden Sie es als Vordergrund.
android:foreground="@drawable/strike_through"

Ich habe versucht, einige Optionen, aber funktioniert das Beste für mich:

String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));

cheers

fügen Sie in:

TextView variableTv = (TextView) findViewById(R.id.yourText);

Sie setzen / add in Sie Variable:

variableTv.setText("It's Text use Style Strike");

und fügen Sie dann .setPaintFlags in variableTv:

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

Ich weiß, ich bin eine alte Frage zu beantworten, könnte es für jemand anderen nützlich sein, zum Schlagen programmatisch einen bestimmten Teil von Textview aus.

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

Also, in diesem Beispielcode wird 5 Startposition und 8 Position des Text Notwendigkeit endet werden durchgestrichen, so dass nach dem Ausführen dieses Codes können wir den Text „Notwendigkeit“ bekommen mit gestrichen. Hoffe, dass es hilfreich für jemand anderes.

Android Ressourcen ziemlich gut haben HTML-Markup Unterstützung < br> Die folgenden HTML-Elemente werden unterstützt:

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=”…”>

Beachten Sie jedoch, dass es in Android Studio Layouts Vorschau nicht gerendert wird. Zuletzt getestet auf Android Studio 3.3.1

Zum Beispiel wird die Durchgestrichene so aussehen:

<string name="cost"><strike>$10</strike> $5 a month</string>

Ich habe dies getan, auf einer regelmäßigen (lokal) TextView, und es sollte auf der Fernbedienung Vielfalt arbeiten, da die Dokumentation der Methode als gleichwertig Liste zwischen den beiden:

remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top