Есть ли простой способ зачеркнуть текст в виджете приложения?

Мне было интересно, есть ли простой способ выделить текст в виджете приложения в Android. В обычной деятельности это довольно легко, используя текстовые флаги:

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

Но так как в виджете приложения я могу использовать только удаленные виды ... Я не знаю, возможно ли это

Кто-нибудь знает что-нибудь об этом?

Спасибо!

 Jorgesys11 февр. 2016 г., 23:42
Смотрите мой ответ здесь!stackoverflow.com/a/35351523/250260
 Jiyeh02 мар. 2018 г., 04:51
Если ты хочешьxml-only Решение, как я:stackoverflow.com/a/49062515/3579786

Ответы на вопрос(15)

TextView, и это должно работать на удаленном множестве, так как документы перечисляют метод как эквивалент между двумя:

remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));

 Harsha13 окт. 2015 г., 10:10
Как я могу достичь по цене с забастовкой, как покупки приложений для предложений
 Blrfl07 окт. 2010 г., 16:00
Это может быть<del> не поддерживаетсяHtml.fromHtml(), Ты пытался<strike> или же<s>?
 Antonio08 окт. 2010 г., 16:02
Спасибо Blrfl, но он тоже не работает. Похоже, что Html.fromHtml () поддерживает только несколько HTML-тегов.
 Massimo22 мая 2014 г., 11:27
Вы решили эту проблему? <strike>, <del> и <s> не работают ...
 Antonio07 окт. 2010 г., 15:38
Это не работает :(. Я делаю это: remoteView.setTextViewText (R.id.text, Html.fromHtml ("<del>" + value + "</ del>")));
 Blrfl08 окт. 2010 г., 16:34
Облом. Извините, я не мог помочь.

Обновление 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 и конфигурация будет работать так:

 maysi29 июл. 2015 г., 23:20
и что делать, если TextView длиннее текста и только текст должен быть зачеркнут?
 James Wald30 янв. 2013 г., 00:45
Это будет работать только для одной строки текста.
 ahmed_khan_8919 июл. 2016 г., 16:31
только для черного и однострочного текста ... @ruhalde работал для меня.

CharacterStyle следующим образом:

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

я отвечаю на старый вопрос, это может быть полезно для кого-то другого, для того, чтобы вычеркнуть определенную часть 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 - конечная позиция текста, которую необходимо вычеркнуть, поэтому после выполнения этого кода мы можем получить текст «потребность» с вычеркнутым. Надеюсь, это будет полезно для кого-то еще.

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

Вы устанавливаете / добавляете в себя переменную:

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

и затем добавьте .setPaintFlags в переменную TV:

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

попробуй этот код

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

Для этого вы можете использовать это

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

и для удаления вы можете использовать это

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
 Harsha28 февр. 2018 г., 15:54
как добавить цвет страйка
 Michael02 апр. 2019 г., 19:08
@ Харша, похоже, это позволяет вам использовать цвет текста. Если вам нужен другой зачеркнутый цвет, вам придется попробовать другой метод реализации.

Это действительно легко, если вы используете строки:

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

А потом просто:

<TextView 
        ...
         android:text="@string/line"
 />
 war_Hero09 окт. 2015 г., 11:17
не работает...
 anthony25 мая 2016 г., 10:24
тоже не работает
 Mic Fok25 янв. 2016 г., 15:39
@war_Hero Работал для меня, но не рендеринг в Android Studio, хотя. Пришлось на самом деле построить его, чтобы увидеть это.
 benoffi707 июл. 2016 г., 14:32
работать при запуске в эмуляторе / устройстве.
 Ranjith Kumar14 нояб. 2016 г., 10:09
это работает для меня .. Вы получаете вывод только на устройстве или эмуляторе ... не в предварительном просмотре ..

мы можем использовать 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)
 Akshay Mukadam14 мая 2015 г., 06:53
@Skizo Я рад, что это помогло тебе
 Skizo-ozᴉʞS13 мая 2015 г., 19:56
Работал как шарм спасибо!

-

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

используйте вашу ссылку вместо "тв"

 Gowthaman M11 сент. 2017 г., 20:23
это не работает для LinearLayout, пожалуйста, помогите мне
 Matthew27 дек. 2015 г., 03:21
Это не относится к вопросу, он спрашивает об объекте RemoteViews в AppWidget.

создать рисовать

<?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"

который выглядит немного менее как хак, чем способ 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);
 BoD22 янв. 2015 г., 18:19
@ Alex.F Я немного удивлен, так как это работает, например, в уведомлениях (которые являются удаленными представлениями). Я должен признать, что я не проверял с AppWidgets все же.
 Karsten17 апр. 2015 г., 03:18
Он работает с виджетами приложений (любой фреймворк, реализующий ParcelableSpan, должен работать)
 Diljeet21 мая 2013 г., 21:54
Это также работает для объектов Button
 Erfan Mowlaei11 авг. 2016 г., 01:26
это работало с адаптером recyclerView, в отличие от другого ответа (@ruhalde), который не работал для него, так что проголосуйте за это.
 Diljeet21 мая 2013 г., 21:37
Спасибо работает как очарование, особенно когда вам нужна какая-то часть TextView для зачеркивания
 Simon Dorociak01 сент. 2014 г., 16:36
+1 Решение с Spannable сработало, спасибо большое. Ты спас мой день. Спасибо чувак ;)
 Alex.F22 янв. 2015 г., 14:12
Это не отвечает на вопрос, так как это не относится кRemoteView

не проверенное в других представлениях >>

TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
 Ridcully17 мар. 2014 г., 18:53
Это невозможно для App-Widgets. Они работают только с RemoteViews, и нет способа прочитать флаги рисования.

но это работает лучше всего для меня:

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

ура

Решение Вопроса

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

Конечно, вы также можете добавить другие флаги из класса android.graphics.Paint.

 Tom Brinkkemper19 июл. 2017 г., 13:00
Этот ответ устарел, Павел отвечает актуальным:stackoverflow.com/a/43836395/2614353
 rylexr03 янв. 2017 г., 23:38
Это должен быть принятый ответ.
 akshat tailang28 нояб. 2018 г., 19:26
Во-первых, неясно, что такое удаленные просмотры, плюс не работает для всех версий Android.
 James Cross04 янв. 2015 г., 22:26
Не знаю, как это не набирает больше голосов, это прекрасно отвечает на вопрос. Благодарю.

Ваш ответ на вопрос