Saya ingin tahu apakah ada cara mudah untuk membuat teks dalam widget aplikasi di Android. Dalam aktivitas normal, cukup mudah, menggunakan flag textview:
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Tetapi karena dalam widget aplikasi, saya hanya dapat menggunakan tampilan jarak jauh ... Saya tidak tahu apakah ini mungkin
Adakah yang tahu sesuatu tentang ini?
Terima kasih!
android
widget
textview
strikethrough
Antonio
sumber
sumber
xml-only
solusi seperti saya: stackoverflow.com/a/49062515/3579786Jawaban:
Anda dapat menggunakan ini:
remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
Tentu saja Anda juga bisa menambahkan tanda lain dari kelas android.graphics.Paint.
sumber
Untuk melakukannya secara terprogram dalam textview, belum teruji di view lain >>
TextView tv = (TextView) findViewById(R.id.mytext); tv.setText("This is strike-thru"); tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
sumber
Cara lain untuk melakukannya secara terprogram yang terlihat sedikit kurang seperti hack daripada cara Paint:
Daripada melakukan:
tv.setText(s);
melakukan:
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);
sumber
RemoteView
Pembaruan 2015: Teman-teman , ini untuk versi Android yang sangat lama. Lihat jawaban lain untuk solusi modern!
Untuk menelusuri seluruh tampilan teks, Anda dapat menggunakan gambar latar belakang tertentu untuk mensimulasikan efek coretan:
android:background="@drawable/bg_strikethrough"
Di mana
bg_strikethrough
drawable adalah 9-tambalan yang membuat garis solid di tengah, tumbuh di kedua sisi, dengan banyak bantalan yang menurut Anda masuk akal. Saya telah menggunakan yang seperti ini:(diperbesar untuk kejelasan .. 1300%!)
Itu adalah versi HDPI saya, jadi simpan (yang pertama http://i.stack.imgur.com/nt6BK.png ) sebagai
res/drawable-hdpi/bg_strikethrough.9.png
dan konfigurasi akan berfungsi seperti ini:sumber
Untuk melakukan ini, Anda dapat menggunakan ini
title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
dan untuk menghapus Anda dapat menggunakan ini
title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
sumber
Jika Anda memiliki satu kata, kami dapat menggunakan drawable. Berikut contohnya:
<item android:state_pressed="false"><shape android:shape="line"> <stroke android:width="2dp" android:color="#ffffff" /> </shape> </item>
jika Anda memiliki banyak baris Anda dapat menggunakan kode berikut:
sumber
Ini adalah ekstensi untuk kalian semua orang 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() }
Pemakaian
textView.showStrikeThrough(true)
Keterbatasan
Coretan hanya bisa memiliki warna yang sama dengan teks
(yaitu teks merah dan coretan biru tidak dimungkinkan)
sumber
Untuk TextView multiline, Anda harus menggunakan android.text.style.CharacterStyle seperti ini:
SpannableString spannable = new SpannableString(text); spannable.setSpan(new StrikethroughSpan(), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); remoteViews.setTextViewText(R.id.itemText, spannable);
sumber
Sangat mudah jika Anda menggunakan string:
<string name="line"> Not crossed <strike> crossed </strike> </string>
Dan kemudian:
<TextView ... android:text="@string/line" />
sumber
Tambahkan baris di bawah ini: -
gunakan referensi Anda, bukan "tv"
sumber
coba kode ini
textview.setText((Html.fromHtml("<strike>hello world!</strike>")));
sumber
Untuk Lollipop ke atas. buat 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>
dan menggunakannya sebagai latar depan.
android:foreground="@drawable/strike_through"
sumber
Anda menambahkan:
TextView variableTv = (TextView) findViewById(R.id.yourText);
Anda mengatur / menambahkan variabel Anda:
variableTv.setText("It's Text use Style Strike");
lalu tambahkan .setPaintFlags di variableTv:
variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
sumber
Saya mencoba beberapa opsi tetapi, ini bekerja paling baik untuk saya:
String text = "<strike><font color=\'#757575\'>Some text</font></strike>"; textview.setText(Html.fromHtml(text));
Bersulang
sumber
Sumber daya Android memiliki dukungan markup HTML yang cukup baik
. Elemen HTML di bawah ini didukung:
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=”…”>
Namun perlu diperhatikan bahwa itu tidak dirender di pratinjau tata letak studio android. Terakhir diuji di Android Studio 3.3.1
Misalnya, Coret akan terlihat seperti itu:
<string name="cost"><strike>$10</strike> $5 a month</string>
sumber
Saya telah melakukan ini pada reguler (lokal)
TextView
, dan itu harus bekerja pada variasi jarak jauh karena dokumen mencantumkan metode yang setara antara keduanya:remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));
sumber
<del>
tidak didukung olehHtml.fromHtml()
. Sudahkah Anda mencoba<strike>
atau<s>
?Saya tahu, saya menjawab pertanyaan lama, mungkin berguna untuk orang lain, karena mencoret bagian tertentu dari TextView secara terprogram.
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);
Jadi, pada kode contoh ini, 5 adalah posisi awal dan 8 adalah posisi akhir teks perlu dicoret, jadi setelah menjalankan kode ini kita bisa mendapatkan teks "perlu" dengan dicoret. Semoga bermanfaat bagi orang lain.
sumber