Ответ 1
Вы можете использовать это:
remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
Конечно, вы также можете добавить другие флаги из класса android.graphics.Paint.
Мне было интересно, есть ли простой способ опубликовать текст в виджетах приложения в Android. В обычной деятельности это довольно легко, используя флаги textview:
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Но поскольку в виджетах приложения я могу использовать только удаленные просмотры... Я не знаю, возможно ли это
Кто-нибудь знает об этом?
Спасибо!
Вы можете использовать это:
remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
Конечно, вы также можете добавить другие флаги из класса android.graphics.Paint.
Сделать это программно в текстовом виде, не проверено в других представлениях →
TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Еще один способ сделать это программно, что выглядит немного хуже взлома, чем способ Paint:
Вместо этого:
tv.setText(s);
делать:
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 Обновление:. Это очень старые версии Android. Другие ответы на современные решения!
Чтобы просмотреть весь текстовый вид, вы можете использовать конкретное фоновое изображение для имитации эффекта зачеркивания:
android:background="@drawable/bg_strikethrough"
Где bg_strikethrough
drawable - это 9-патч, который удерживает сплошную линию посередине, растущую с обеих сторон, но с большим количеством отступов, которые вы считаете разумными. Я использовал один такой:
(увеличено для ясности.. 1300%!)
Это моя версия HDPI, поэтому сохраните ее (первая http://i.stack.imgur.com/nt6BK.png) как res/drawable-hdpi/bg_strikethrough.9.png
, и конфигурация будет работать так:
Для этого вы можете использовать этот
title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
и для удаления вы можете использовать этот
title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
Если у вас есть одно слово, мы можем использовать drawable. Ниже приведен пример:
<item android:state_pressed="false"><shape android:shape="line">
<stroke android:width="2dp" android:color="#ffffff" />
</shape>
</item>
если у вас несколько строк, вы можете использовать следующий код:
TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG)
Для многострочного TextView вы должны использовать android.text.style.CharacterStyle следующим образом:
SpannableString spannable = new SpannableString(text);
spannable.setSpan(new StrikethroughSpan(), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
remoteViews.setTextViewText(R.id.itemText, spannable);
Это очень просто, если вы используете строки:
<string name="line"> Not crossed <strike> crossed </strike> </string>
А потом просто:
<TextView
...
android:text="@string/line"
/>
Добавьте строку ниже: -
TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
используйте ссылку вместо "tv"
попробуй этот код
textview.setText((Html.fromHtml("<strike>hello world!</strike>")));
Я попробовал несколько вариантов, но это работает лучше всего для меня:
String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));
ура
вы добавили:
TextView variableTv = (TextView) findViewById(R.id.yourText);
вы устанавливаете/добавляете в переменную You:
variableTv.setText("It Text use Style Strike");
а затем добавьте .setPaintFlags в переменнойTv:
variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Я знаю, я отвечаю на старый вопрос, это может быть полезно для кого-то другого, для того, чтобы вычеркнуть определенную часть TextView программно.
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);
Таким образом, в этом примере кода 5 - начальная позиция, а 8 - конечная позиция текста, которую необходимо вычеркнуть, поэтому после выполнения этого кода мы можем получить текст "потребность" с вычеркнутым. Надеюсь, это будет полезно для кого-то еще.
создать рисовать
<?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>
и использовать его в качестве переднего плана. android:foreground="@drawable/strike_through"
Вот расширение для всех вас, 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()
}
использование
textView.showStrikeThrough(true)
Ограничения
Я сделал это на обычном (локальном) TextView
, и он должен работать на удаленном многообразии, так как docs перечисляют метод как эквивалент между двумя:
remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));