Gibt es eine einfache Möglichkeit, Text in einem App-Widget durchzustreichen?

Lesezeit: 4 Minuten

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

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

Aber da ich in einem App-Widget nur Remoteviews verwenden kann … Ich weiß nicht, ob dies möglich ist

Weiß jemand etwas darüber?

Danke!

  • Siehe meine Antwort hier! stackoverflow.com/a/35351523/250260

    – Jorgesys

    11. Februar 16 um 22:42 Uhr

  • Falls Sie es wollen xml-only Lösung wie ich: stackoverflow.com/a/49062515/3579786

    – Jiyeh

    2. März 18 um 3:51 Uhr

Um es programmatisch in einer Textansicht zu machen, 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);

  • Bei App-Widgets ist dies nicht möglich. Sie funktionieren nur mit RemoteViews und es gibt keine Methode zum Lesen der Paint-Flags.

    – Lächerlich

    17. März 14 um 17:53 Uhr

Gibt es eine einfache Moglichkeit Text in einem App Widget durchzustreichen
BoD

Ein anderer Weg, dies programmgesteuert zu tun, der etwas weniger wie ein Hack aussieht als der Paint-Weg:

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

  • Danke funktioniert wie ein Zauber, besonders wenn Sie einen Teil von TextView benötigen, um eine durchgestrichene Linie zu haben

    – Diljeet

    21. Mai ’13 um 19:37 Uhr


  • +1 Lösung mit Spannable hat funktioniert, vielen Dank. Du hast meinen Tag gerettet. Danke, Mann 😉

    – Simon Dorociak

    1. September 14 um 14:36 ​​Uhr

  • Dies beantwortet die Frage nicht, da dies nicht zutrifft RemoteView

    – Alex.F

    22. Januar 15 um 13:12 Uhr

  • @Alex.FI bin etwas überrascht, da dies beispielsweise in Benachrichtigungen (die Remote-Ansichten sind) funktioniert. Ich muss zugeben, dass ich AppWidgets noch nicht getestet habe.

    – Vorstand

    22. Januar 15 um 17:19 Uhr

  • Es funktioniert mit App-Widgets (jeder Framework-Span, der ParcelableSpan implementiert, sollte funktionieren)

    – Karsten

    17. April 15 um 1:18 Uhr

Sie können dies verwenden:

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

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

  • Ich weiß nicht, wie das nicht mehr Stimmen bekommen hat, es beantwortet die Frage perfekt. Danke.

    – Jakobskreuz

    4. Januar 15 um 21:26 Uhr

  • Zunächst ist unklar, was remoteviews ist, und funktioniert nicht für alle Android-Versionen.

    – akshat tailang

    28. November 18 um 18:26 Uhr

  • Dies ist die Antwort, nach der wir suchen. Die Arbeit mit App-Widgets auf AndroidTextViews ist nur über removeViews zugänglich. Ein direkter Zugriff auf TextView ist an dieser Stelle nicht möglich.

    – sich anstrengen

    19. März 20 um 14:52 Uhr

Gibt es eine einfache Moglichkeit Text in einem App Widget durchzustreichen
ohhorob

Aktualisierung 2015: Leute, das ist für sehr alte Versionen von Android. Siehe andere Antworten für moderne Lösungen!


Um die gesamte Textansicht durchzustreichen, können Sie ein bestimmtes Hintergrundbild verwenden, um den Durchstreichungseffekt zu simulieren:

android:background="@drawable/bg_strikethrough"

Bei dem die bg_strikethrough drawable ist ein 9-Patch, der eine durchgezogene Linie durch die Mitte hält und auf beiden Seiten wächst, mit so viel Polsterung, wie Sie es für angemessen halten. Ich habe so einen benutzt:

Alt-Text

(zur Verdeutlichung vergrößert.. 1300% !)

Alt-Text

Das ist meine HDPI-Version, also speichern Sie sie (die erste http://i.stack.imgur.com/nt6BK.png) wie res/drawable-hdpi/bg_strikethrough.9.png und die Konfiguration wird wie folgt funktionieren:

Alt-Text

Dazu können Sie dies verwenden

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

und zum Entfernen können Sie dies verwenden

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

  • Wie kann ich Schlagfarbe hinzufügen

    – Harscha

    28. Februar 18 um 14:54 Uhr

  • @Harsha Dies scheint Ihnen nur zu erlauben, die Farbe des Textes zu verwenden. Wenn Sie eine andere durchgestrichene Farbe wünschen, müssen Sie eine andere Implementierungsmethode ausprobieren.

    – Michael

    02.04.19 um 17:08 Uhr

1644122048 297 Gibt es eine einfache Moglichkeit Text in einem App Widget durchzustreichen
Michael

Hier ist eine Erweiterung für alle 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)

Einschränkung

Durchgestrichene Texte dürfen nur dieselbe Farbe haben wie der Text

(dh roter Text und blauer Durchstrich ist nicht möglich)

  • Wie kann ich Schlagfarbe hinzufügen

    – Harscha

    28. Februar 18 um 14:54 Uhr

  • @Harsha Dies scheint Ihnen nur zu erlauben, die Farbe des Textes zu verwenden. Wenn Sie eine andere durchgestrichene Farbe wünschen, müssen Sie eine andere Implementierungsmethode ausprobieren.

    – Michael

    02.04.19 um 17:08 Uhr

1644122048 770 Gibt es eine einfache Moglichkeit Text in einem App Widget durchzustreichen
Akshay Mukadam

Wenn Sie ein einzelnes Wort haben, können wir drawable verwenden. Nachfolgend 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)

  • @Skizo Ich bin froh, dass es dir geholfen hat

    – Akshay Mukadam

    14. Mai 15 um 4:53 Uhr

.

792380cookie-checkGibt es eine einfache Möglichkeit, Text in einem App-Widget durchzustreichen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy