アプリウィジェットのテキストを簡単に打ち消す方法はありますか?


138

Androidのアプリウィジェット内で簡単にテキストを打つ方法があるかどうか疑問に思っていました。通常のアクティビティでは、textviewフラグを使用すると、非常に簡単です。

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

しかし、アプリウィジェットではリモートビューしか使用できないため、これが可能かどうかわかりません

誰かこれについて何か知っていますか?

ありがとう!


ここで私の答えを見てください!stackoverflow.com/a/35351523/250260
Jorgesys '11

xml-only私のようなソリューションが必要な場合:stackoverflow.com/a/49062515/3579786
Jiyeh

1
それは...助けるかもしれないアンドロイドのTextView取り消し線- 6つの方法
C49を

回答:


68

あなたはこれを使うことができます:

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

もちろん、android.graphics.Paintクラスから他のフラグを追加することもできます。


8
これがもっと多くの票を獲得していないかわからない、それは完全に質問に答えます。ありがとう。
James Cross

まず、remoteviewsとは何かが不明であり、すべてのAndroidバージョンで機能するわけではありません。
akshat tailang

これが私たちが探している答えです。androidTextViewsでアプリウィジェットを操作するには、removeViewsを介してのみアクセスできます。現時点では、TextViewに直接アクセスすることはできません。
エンデバー

188

他のビューでテストされていない、テキストビューでプログラム的に行うには>>

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

13
これは、App-Widgetsでは不可能です。これらはRemoteViewでのみ機能し、ペイントフラグを読み取る方法はありません。
Ridcully 2014年

78

プログラムでそれを実行する別の方法は、ペイントの方法よりもハックに少し似ていません。

代わりに:

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

おかげで魅力のように機能します特にTextViewの一部に取り消し線を付ける必要がある場合
Diljeet

+1 Spannableのソリューションが機能しました。どうもありがとうございました。あなたは私の日を救った。おかげで男;)
Simon Dorociak '

これは当てはまらないため、質問には答えませんRemoteView
Alex.F

@ Alex.FIは、たとえば通知(リモートビュー)で機能するため、少し驚いています。AppWidgetsでテストしていないことは認めざるを得ません。
BoD、2015年

1
アプリウィジェットで動作します(ParcelableSpanを実装するフレームワークスパンは動作するはずです)
Karsten

58

2015年の更新:これはAndroidの非常に古いバージョン用です。最新のソリューションについては、他の回答をご覧ください。


テキストビュー全体に取り消し線を引くには、特定の背景画像を使用して取り消し線効果をシミュレートできます。

android:background="@drawable/bg_strikethrough"

どこでbg_strikethrough描画可能あなたが合理的だと思うしかし、多くのパディングと、どちらかの側に成長し、中央から実線を保つ9パッチです。私はこのようなものを使用しました:

代替テキスト

(わかりやすくするために拡大しました。1300%!)

代替テキスト

これは私のHDPIバージョンなので、保存して(最初のバージョンはhttp://i.stack.imgur.com/nt6BK.pngres/drawable-hdpi/bg_strikethrough.9.png、構成は次のように機能します。

代替テキスト


そして、TextViewがテキストよりも長く、テキストのみに取り消し線を引く必要がある場合はどうしますか?
maysi 2015

黒と1行のテキストのみ... @ruhaldeがうまくいきました。
ahmed_khan_89

27

これを行うには、これを使用できます

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

削除するには、これを使用できます

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

1
ストライクカラーを追加するには
Harsha、2018

@Harshaこれはテキストの色のみを使用できるようです。別の取り消し線の色が必要な場合は、他の実装方法を試す必要があります。
マイケル

19

一言あればドローアブルを使うことができます。次に例を示します。

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

@Skizoそれがあなたを助けてくれてうれしい
Akshay Mukadam

13

ここにあなたのすべてのコトリンの人々のための拡張があります

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)

制限

取り消し線はテキストと同じ色にすることができます

(つまり、赤いテキストと青い取り消し線は使用できません)


9

複数行の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);

8

文字列を使用している場合、それは本当に簡単です。

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

そして、ただ:

<TextView 
        ...
         android:text="@string/line"
 />

4
@war_Heroうまくいきましたが、Android Studioのレンダラーではレンダリングできません。実際にそれを見るためにビルドしなければなりませんでした。
Mic Fok 2016年

8

以下の行を追加します:-

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

「テレビ」の代わりに参照を使用する


1
これは質問を参照していない、彼はAppWidgetのRemoteViewsオブジェクトについて尋ねています。
マシュー

3

このコードを試してください

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

2

Lollipop以上の場合。ドローアブルを作成する

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


0

あなたが追加します:

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

あなたはあなたに変数を設定/追加します:

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

次に、variableTvに.setPaintFlagsを追加します。

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

0

私はいくつかのオプションを試しましたが、これは私にとって最もうまくいきます:

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

乾杯


0

Androidリソースはかなり良いHTMLマークアップをサポートしてい
ます以下のHTML要素がサポートされています:

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=”…”>

ただし、Android Studioレイアウトのプレビューではレンダリングされないことに注意してください。Android Studio 3.3.1での最終テスト

たとえば、取り消し線は次のようになります。

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

-1

私はこれを通常の(ローカル)TextViewで行いましたが、ドキュメントでは2つのメソッドが同等のものとしてリストされているため、リモートのさまざまな方法で機能するはずです。

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


それは機能しません:(。私はこれをやっています:remoteView.setTextViewText(R.id.text、Html.fromHtml( "<del>" + value + "</ del>"));
Antonio

<del>サポートされていない可能性がありますHtml.fromHtml()。試しました<strike><s>
Blrfl

Blrflに感謝しますが、機能しません。Html.fromHtml()でサポートされているHTMLタグはごくわずかです。
アントニオ

残念。すみません、助けられませんでした。
Blrfl

オファー用のショッピングアプリのようなストライキで価格をどのように達成できるか
Harsha

-1

私は古い質問に答えています。プログラムで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が終了位置のテキストを打ち消す必要があるため、このコードを実行すると、テキストを取り消し線で「必要」にできます。それが他の誰かのために役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.