textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
但是因为在应用程序小部件中,我只能使用remoteviews... 我不知道这是否可能。
有人知道关于这个的一些信息吗?
谢谢!
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
但是因为在应用程序小部件中,我只能使用remoteviews... 我不知道这是否可能。
有人知道关于这个的一些信息吗?
谢谢!
要在TextView中以编程方式完成此操作,在其他视图中未经测试 >>
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);
您可以使用以下方法:
remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
当然,您还可以从android.graphics.Paint类中添加其他标志。
2015 年更新: 各位,这是针对非常旧版本的 Android。请查看其他答案以获取现代解决方案!
要将整个文本视图划掉,您可以使用特定的背景图像来模拟删除线效果:
android:background="@drawable/bg_strikethrough"
bg_strikethrough
可绘制对象是一个9-patch图像,它通过中间保持一条实线,在两侧增长,具有您认为合理的任意填充。我使用了像这样的一个:
(已放大以获得更清晰的效果.. 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));
这里有一个扩展,适用于所有使用 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)
限制
删除线只能与文本颜色相同。
(例如,红色文本和蓝色删除线是不可能的)
如果您正在使用字符串,那么这真的很容易:
<string name="line"> Not crossed <strike> crossed </strike> </string>
然后只需要:
<TextView
...
android:text="@string/line"
/>
<?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="@android:color/holo_red_dark" />
</shape>
</item>
</selector>
布局 XML
<TextView
....
....
android:background="@drawable/striking_text"
android:foreground="@drawable/striking_text"
android:text="69$"
/>
如果您的min SDK低于API级别23,只需使用background,或者将background和foreground放在Textview中,然后Android Studio将显示一个错误,提示为API>23创建布局文件,然后从主布局中删除android:foreground="@drawable/stricking_text"
对于多行的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);
TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
使用您的参考资料代替“电视”