Android 有没有一种简单的方法来浏览应用程序小部件中的文本?

Android 有没有一种简单的方法来浏览应用程序小部件中的文本?,android,widget,textview,strikethrough,Android,Widget,Textview,Strikethrough,我想知道是否有一种简单的方法可以在Android的应用程序小部件中输入文本。在正常活动中,使用textview标志非常简单: textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); 但由于在应用程序小部件中,我只能使用Remot

我想知道是否有一种简单的方法可以在Android的应用程序小部件中输入文本。在正常活动中,使用textview标志非常简单:

textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
但由于在应用程序小部件中,我只能使用RemoteView。。。我不知道这是否可能

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
有人知道这件事吗

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

谢谢

我已经在常规(本地)
TextView
上完成了这项工作,它应该可以在远程版本上使用,因为文档中列出了两种方法之间的等效方法:

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
remote\u text\u view.setText(Html.fromHtml(“这被划掉”)

2015更新:各位,这是针对非常旧的Android版本的。查看其他现代解决方案的答案

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

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

android:background="@drawable/bg_strikethrough"
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
其中,
bg_删除线
drawable是一个9面片,中间有一条实线,两边都长,无论你认为多少填充都是合理的。我用过这样一个:

SpannableString spannable = new SpannableString(text);
spannable.setSpan(new StrikethroughSpan(), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
remoteViews.setTextViewText(R.id.itemText, spannable);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
(为了清晰起见放大了..1300%!)

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

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
这是我的HDPI版本,因此将其(第一个)保存为
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));

在文本视图中以编程方式执行,未在其他视图中测试>>

TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
您可以使用以下选项:

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

当然,您也可以从android.graphics.Paint类添加其他标志。

另一种编程方式,它看起来不像是一种黑客行为,而不是绘画方式:

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
而不是做:

tv.setText(s);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
做:

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

如果您使用的是字符串,则非常容易:

<string name="line"> Not crossed <strike> crossed </strike> </string>
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
未交叉
然后就是:

<TextView 
        ...
         android:text="@string/line"
 />
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

对于多行文本视图,您应该使用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);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

如果您有一个单词,我们可以使用drawable。 以下是一个例子:

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
添加以下行:-

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));
使用您的引用,而不是您添加的“tv”

TextView variableTv = (TextView) findViewById(R.id.yourText);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
设置/添加变量:

variableTv.setText("It's Text use Style Strike");
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
然后在variableTv中添加.setPaintFlags:

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

要做到这一点,你可以用这个

 title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
对于移除,你可以使用这个

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

我尝试了几种选择,但这对我最有效:

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));
String text=“一些文本”;
textview.setText(Html.fromHtml(text));

干杯

我知道,我在回答一个老问题,它可能对其他人有帮助,因为它可以通过编程方式删除TextView的特定部分

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
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是需要删除的文本的结束位置,因此在运行此代码后,我们可以得到带有删除的文本“需要”。希望它能对其他人有所帮助。

试试这段代码

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
textview.setText((Html.fromHtml("<strike>hello world!</strike>")));
textview.setText((Html.fromHtml(“helloworld!”));

用于棒棒糖及以上。创建一个可绘制的

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
<?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\u-through”

这里有一个扩展,供所有Kotlin人使用

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
fun TextView.showStrikeThrough(show: Boolean) {
    paintFlags =
            if (show) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
            else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}

用法

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
textView.showStrikeThrough(true)

限制

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
删除线只能与文本颜色相同

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

(即红色文本和蓝色删除线是不可能的)

Android资源非常好
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
支持以下HTML元素:

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
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=”…”>
Bold:,
斜体:,
文本放大25%:
20%小文本:
正在设置字体属性:。可能的字体系列包括单空格、衬线和无衬线。
设置单空间字体系列:
删除线:,
下划线:
上标:
下标:
要点:
  • 换行符:
    分部: CSS样式: 段落:

但是请注意,它不会在android studio版面预览中呈现。上次在Android Studio 3.3.1上测试

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
例如,删除线将如下所示:

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
<string name="cost"><strike>$10</strike> $5 a month</string>
每月10美元5美元
制作一个可绘制文件, 引人注目的文本.xml

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
<?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

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
 <TextView
            ....
            ....
            android:background="@drawable/striking_text"
            android:foreground="@drawable/striking_text"
            android:text="69$"
           />

如果您的MinSDK低于API级别23,请使用后台 只需将背景和前景放在文本视图中,android studio就会显示一个错误,显示为API>23创建布局文件,然后从主布局中删除android:foreground=“@drawable/stricking_text”

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
输出如下所示:

它不起作用:(.我正在这样做:remoteView.setTextViewText(R.id.text,Html.fromHtml(“+value+”));可能是
不受
Html.fromHtml()
的支持。你试过
?谢谢Blrfl,但它也不起作用。似乎只有少数Html标记受Html.fromHtml()的支持.Bummer.抱歉,我帮不上忙。我怎样才能用strike-like购物应用程序实现价格优惠感谢像一个符咒一样工作,特别是当您需要TextView的某些部分使strikethrough line+1解决方案与Spanable一起工作时,非常感谢。您救了我一天。谢谢人;)这并没有回答这个问题,因为这不适用于
RemoteView
@Alex.F我有点惊讶,因为这确实适用于通知(即远程视图)。我必须承认,我还没有用AppWidgets进行测试。它确实可以用AppWidgets(任何实现ParcelableSpan的框架都应该可以用)这对于AppWidgets是不可能的。它们只与RemoteView一起工作,没有读取绘制标志的方法。不知道这是如何没有获得更多选票的,它完美地回答了这个问题。谢谢。首先,我们不清楚什么是remoteviews,plus并不适用于所有android版本。这就是我们要寻找的答案,在AndroidTextView上使用应用程序小部件只能通过removeViews访问。此时不可能直接访问TextView。@Skizo我很高兴它对您有所帮助,如果TextView更长,该怎么办
 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));