152

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

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

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

これについて何か知っている人はいますか?

ありがとう!

4

19 に答える 19

206

テキストビューでプログラム的に実行するには、他のビューではテストされていません>>

TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
于 2011-07-18T21:22:43.033 に答える
83

プログラムでそれを行う別の方法は、ペイントの方法よりもハックのようには見えません。

代わりに:

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);
于 2012-07-31T15:43:23.010 に答える
73

これを使用できます:

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

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

于 2011-10-09T11:12:24.433 に答える
61

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


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

android:background="@drawable/bg_strikethrough"

bg_strikethroughドローアブルが中央を通る実線を維持し、どちらかの側に成長する9パッチである場合、どれだけ多くのパディングが妥当であると思いますか。私はこのようなものを使用しました:

代替テキスト

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

代替テキスト

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

代替テキスト

于 2011-01-20T20:37:26.093 に答える
20

単語が 1 つあれば、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)
于 2014-12-05T09:59:45.553 に答える
10

文字列を使用している場合は非常に簡単です。

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

そして、ちょうど:

<TextView 
        ...
         android:text="@string/line"
 />
于 2014-06-07T00:23:42.127 に答える
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);
于 2014-06-23T16:26:10.410 に答える
8

以下の行を追加してください:-

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

「テレビ」の代わりにあなたの参照を使用してください

于 2015-11-23T10:14:34.587 に答える
0

追加します:

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

You変数に設定/追加します:

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

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

variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
于 2017-04-04T08:34:42.910 に答える
-1

私はこれを通常の(ローカル)TextViewで実行しましたが、ドキュメントには2つのメソッドが同等であると記載されているため、リモートのバラエティでも機能するはずです。

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

于 2010-10-07T12:55:47.773 に答える