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:
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
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)
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
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:
(zur Verdeutlichung vergrößert.. 1300% !)
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:
@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
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
Akshay Mukadam
Wenn Sie ein einzelnes Wort haben, können wir drawable verwenden. Nachfolgend das Beispiel:
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