有没有一种简单的方法可以删除应用程序小部件中的文本?
我想知道是否有一种简单的方法可以在 Android 的应用程序小部件中删除文本。在正常活动中,使用文本视图标志非常简单:
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
但是由于在应用程序小部件中,我只能使用远程视图...我不知道这是否可能
有人知道这件事吗?
谢谢!
I was wondering if there is an easy way to strike text within an app widget in Android. In a normal activity, it is pretty easy, using textview flags:
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
But since in an app widget, I can use only remoteviews... I do not know if this is possible
Anyone know something about this?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(23)
另一种以编程方式完成此操作的方法,与 Paint 方法相比,它看起来不像黑客:
而不是这样做:
做:
Another way to do it programmatically which looks a bit less like a hack than the Paint way:
Instead of doing:
do:
您可以使用这个:
当然您也可以从 android.graphics.Paint 类添加其他标志。
You can use this:
Of course you can also add other flags from the android.graphics.Paint class.
2015 更新:各位,这是针对非常旧版本的 Android 的。查看现代解决方案的其他答案!
要删除整个文本视图,您可以使用特定的背景图像来模拟删除效果:
其中
bg_strikethrough
可绘制对象是一个 9 块,它保持一条实线穿过中间,并在两侧增长,无论您认为合理多少填充。我用过这样的一个:(为了清晰起见,放大了.. 1300%!)
这是我的 HDPI 版本,因此保存它(第一个 https://i.sstatic.net/nt6BK.png) 作为
res/drawable-hdpi/bg_strikethrough.9.png
并且配置将按如下方式工作:2015 Update: Folks, this is for very old versions of Android. See other answers for modern solutions!
To strike through the entire text view, you can use a specific background image to simulate the strikethrough effect:
Where the
bg_strikethrough
drawable is a 9-patch that keeps a solid line through the middle, growing either side, with however much padding you think is reasonable. I've used one like this:(enlarged for clarity.. 1300% !)
That is my HDPI version, so save it (the first one https://i.sstatic.net/nt6BK.png) as
res/drawable-hdpi/bg_strikethrough.9.png
and the configuration will work as so:为此,您可以使用它
,如果要删除,您可以使用它
For doing this you can use this
and for remove you can use this
这是为所有 Kotlin 人员提供的扩展
用法
限制
删除线只能与文本颜色相同
(即红色文本和蓝色删除线是不可能的)< /em>
Here is an extension for all you Kotlin folks
Usage
Limitation
Strikethroughs can only be the same color as the text
(i.e. Red text and blue strikethrough is not possible)
制作一个可绘制的文件,
striking_text.xml
布局 xml
如果您的最低 SDK 低于 API 级别 23,则只需使用背景
或只需将背景和前景放在 Textview 中,然后 android studio 就会显示一条错误,指出为 API >23 创建一个布局文件,然后删除 android:foreground="@drawable /stricking_text" 从主布局
输出看起来像这样:
Make a drawable file,
striking_text.xml
layout xml
If your min SDK below API level 23 just use the background
or just put the background and foreground in the Textview then the android studio will show an error that says create a layout file for API >23 after that remove the android:foreground="@drawable/stricking_text" from the main layout
Output look like this:
如果您使用字符串,这真的很容易:
然后只需:
It is really easy if you are using strings:
And then just:
对于多行 TextView,您应该使用 android.text.style.CharacterStyle,如下所示:
For multiline TextView you should use android.text.style.CharacterStyle like this:
添加以下行:-
使用您的参考而不是“电视”
Add the line below:-
use your reference instead of "tv"
试试这个代码
try this code
科特林方式
Kotlin way
Android 资源具有非常好的 HTML 标记支持
支持以下 HTML 元素:
但请注意,它不会在 android studio 布局预览中呈现。上次在 Android Studio 3.3.1 上进行测试
例如,删除线将如下所示:
Android resources have pretty good HTML markup support
The below HTML elements are supported:
Note however that it's not rendered in android studio layouts preview. Last tested on Android Studio 3.3.1
For example, the Strikethrough will look like that:
适用于棒棒糖及以上版本。创建一个可绘制对象
并将其用作前景。
android:foreground="@drawable/strike_through"
For Lollipop and above. create a drawable
and use it as foreground.
android:foreground="@drawable/strike_through"
Kotlin方式
averagePrice.paintFlags = Paint.STRIKE_THRU_TEXT_FLAG
Kotlin way
averagePrice.paintFlags = Paint.STRIKE_THRU_TEXT_FLAG
您可以使用数据绑定!
在 XML 布局中只需执行 app:strike="@{true}"
You Can use data binding!
In XML layout just do app:strike="@{true}"
-创建一个绑定适配器类并
在 xml 上添加此方法,您必须设置此方法
-create a binding adapter class and add this method
on xml u have to set this
您添加:
您设置/添加您变量:
然后在variableTv中添加.setPaintFlags:
you add in :
you set/add in You variable :
and then add .setPaintFlags in variableTv :
我尝试了几种选择,但是,这最适合我:
干杯
I tried few options but, this works best for me:
cheers
作为 Kotlin 扩展的另一个解决方案:
Another solution as a Kotlin extension:
我创建了这个方法,可以从我的应用程序中的任何位置使用,
如果您有多语言和多货币应用程序,
我可以这样称呼它:
然后像这样分配
I created this method to use from any where within my app
it can be used if you have multi language and multi currency app
I call it like this:
then assign like this
我已经在常规(本地)TextView 上完成了此操作,并且它应该适用于远程品种,因为文档列出了两者之间等效的方法:
remote_text_view.setText(Html.fromHtml (“这是
划掉了。”));I've done this on a regular (local)
TextView
, and it should work on the remote variety since the docs list the method as equivalent between the two:remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));
我知道,我正在回答一个老问题,它可能对其他人有帮助,可以以编程方式删除 TextView 的特定部分。
所以,在这个示例代码中,5是需要删除的文本的起始位置,8是需要删除的文本的结束位置,因此运行此代码后我们可以得到删除掉的文本“need”。希望它对其他人有帮助。
I know, I am answering an old question, it might be helpful for someone else, for striking out a particular portion of TextView programmatically.
So, in this example code, 5 is starting position and 8 is ending position of text need to be stricken out, so after running this code we can get the text "need" with striked out. Hope it will helpful for someone else.
要在文本视图中以编程方式执行此操作,未在其他视图中进行测试>>
To do it programatically in a textview, untested in other views >>