web-dev-qa-db-ger.com

Gibt es eine einfache Möglichkeit, Text in einem App-Widget durchzublättern?

Ich habe mich gefragt, ob es einen einfachen Weg gibt, Text in einem App-Widget in Android zu finden. In einer normalen Aktivität ist das Verwenden von Textviewflags ziemlich einfach:

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

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

Weiß jemand etwas davon?

Vielen Dank!

123
Antonio

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 Flaggen aus der Android.graphics.Paint-Klasse hinzufügen.

53
agirardello

Um es programmgesteuert in einer Textansicht auszuführen, in anderen Ansichten nicht getestet >>

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

Eine andere Möglichkeit, es programmgesteuert auszuführen, die ein bisschen weniger wie ein Hack aussieht als die Paint-Methode:

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

2015 Update: Leute, dies ist für sehr alte Versionen von Android. Sehen Sie andere Antworten für moderne Lösungen!


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

Android:background="@drawable/bg_strikethrough"

Der bg_strikethrough drawable ist ein 9er-Patch, der eine durchgehende Linie in der Mitte hält und auf beiden Seiten wächst, mit so viel Polsterung, wie Sie es für sinnvoll halten. Ich habe eins so benutzt:

alt text

(zur besseren Übersicht vergrößert .. 1300%!)

alt text

Dies ist meine HDPI-Version. Speichern Sie sie (die erste Version http://i.stack.imgur.com/nt6BK.png ) als res/drawable-hdpi/bg_strikethrough.9.png. Die Konfiguration funktioniert wie folgt:

alt text

59
ohhorob

Wenn Sie ein einzelnes Wort haben, können wir drawable ..__ verwenden. Folgendes 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)
19
Akshay Mukadam

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

Für mehrzeiliges TextView sollten Sie Android.text.style.CharacterStyle wie folgt verwenden:

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

Es ist sehr einfach, wenn Sie Strings verwenden:

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

Und dann einfach:

<TextView 
        ...
         Android:text="@string/line"
 />
8
Ignacio Alorre

Fügen Sie die folgende Zeile hinzu: -

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

verwenden Sie Ihre Referenz anstelle von "tv"

versuchen Sie diesen Code

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

Ich habe ein paar Optionen ausprobiert, aber das funktioniert am besten für mich:

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

prost

1

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()
}

Verwendungszweck

textView.showStrikeThrough(true)

Einschränkung

Durchgestrichene Zeichen können nur dieselbe Farbe wie der Text haben

(d. h. roter Text und blaues Durchstreichen sind nicht möglich)

0
Michael

sie fügen hinzu: 

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

sie setzen/addieren in Sie Variable:

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

und dann .setPaintFlags in variableTv hinzufügen:

variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
0
Briliant Fay

erstellen Sie eine Zeichenfläche

<?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 benutze es als Vordergrund.
Android:foreground="@drawable/strike_through"

0
Akshay More

Ich weiß, ich beantworte eine alte Frage, es könnte für jemanden hilfreich sein, einen bestimmten Teil von TextView programmgesteuert hervorzuheben.

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

In diesem Beispielcode ist 5 die Anfangsposition und 8 die Endposition des Texts, der herausgestrichen werden muss. Nach dem Ausführen dieses Codes können wir den Text "need" mit gestrichenem Text erhalten. Hoffe, es wird für jemand anderen hilfreich sein.

0
Ram Koti

Android-Ressourcen haben ziemlich gute HTML-Markup-Unterstützung
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 nicht in der Vorschau von Android Studio-Layouts gerendert wird. Zuletzt getestet auf Android Studio 3.3.1

Zum Beispiel sieht das Durchgestrichen so aus:

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