是否有一个简单的方法来通过应用程序小部件中的文本?

我想知道是否有一个简单的方法来敲打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中执行,在其他视图中未经testing>>

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

另一种以编程方式执行的方式,看起来不像“画图”方式那样是黑客行为:

而不是做:

 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版本。 查看现代解决scheme的其他答案!


要浏览整个文本视图,可以使用特定的背景图像来模拟删除线效果:

 android:background="@drawable/bg_strikethrough" 

如果bg_strikethrough drawable是一个在中间保持一条固定线的9块补丁,那么在任何一边都可以,不pipe填充多less,你认为是合理的。 我用过这样的一个:

替代文字

(为了清晰起见,放大了1300%!)

替代文字

这是我的HDPI版本,所以保存(第一个http://i.stack.imgur.com/nt6BK.png )为res/drawable-hdpi/bg_strikethrough.9.png ,configuration将如下工作:

替代文字

如果你有一个单词,我们可以使用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,这真的很容易:

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

用你的参考而不是“电视”

为了做到这一点,你可以使用这个

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

和删除,你可以使用这个

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

你join:

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

你设置/添加你variables:

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

然后在variableTv中添加.setPaintFlags:

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

我已经在一个常规的(本地) TextView上完成了这个工作,并且它应该在远程TextView工作,因为文档将这个方法列为两者之间的等价方法:

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