是否有一种简单的方法可以在app小部件中显示文本?

时间:2010-10-07 12:21:46

标签: android widget textview strikethrough

我想知道是否有一种简单的方法可以在Android中的app小部件中查看文本。在正常活动中,使用textview标记非常简单:

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

但是因为在app小部件中,我只能使用远程视图......我不知道这是否可能

有人对此有所了解吗?

谢谢!

18 个答案:

答案 0 :(得分:178)

在textview中以编程方式执行此操作,在其他视图中未经测试>>

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

答案 1 :(得分:77)

以编程方式执行此操作的另一种方法,看起来有点像黑客而不是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);

答案 2 :(得分:59)

2015年更新: 感谢,这适用于非常旧版本的Android。查看现代解决方案的其他答案!


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

android:background="@drawable/bg_strikethrough"

bg_strikethrough drawable是一个9-patch,它在中间保持一条实线,在任何一边生长,无论你认为多少填充都是合理的。我用过这样的一个:

  

alt text

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

  

alt text

这是我的HDPI版本,因此将其保存(第一个http://i.stack.imgur.com/nt6BK.png)为res/drawable-hdpi/bg_strikethrough.9.png,配置将如下:

  

alt text

答案 3 :(得分:54)

您可以使用:

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

当然你也可以在android.graphics.Paint类中添加其他标志。

答案 4 :(得分:21)

为此,您可以使用此

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

对于删除,您可以使用此

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

答案 5 :(得分:19)

如果您只有一个单词,我们可以使用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)

答案 6 :(得分:10)

对于多行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);

答案 7 :(得分:8)

如果您使用字符串,这真的很容易:

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

然后只是:

<TextView 
        ...
         android:text="@string/line"
 />

答案 8 :(得分:8)

添加以下行: -

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

使用您的参考而不是“tv”

答案 9 :(得分:2)

试试这段代码

gdxVersion = 'x.x.x'

答案 10 :(得分:1)

制作一个可绘制的文件, striking_text.xml

<?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$"
           />

如果您的最低SDK低于API级别23,请使用后台 只需将背景和前景放在Textview中,然后android studio将显示一条错误,提示您删除 android:foreground =“ @ drawable /主要布局中的stricking_text”

输出看起来像这样: enter image description here

答案 11 :(得分:1)

我尝试了几个选项,但这对我来说效果最好:

String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));

欢呼声

答案 12 :(得分:0)

我知道,我正在回答一个老问题,对于其他人来说,以编程方式删除TextView的特定部分可能会有所帮助。

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是文本的结束位置需要被删除,所以在运行此代码后我们可以得到文本&#34;需要&#34;罢工。希望它对其他人有帮助。

答案 13 :(得分: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);

答案 14 :(得分:0)

创建一个可绘制对象

<?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_through"

答案 15 :(得分:0)

这里是所有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)

限制

删除线只能与文本使用相同的颜色

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

答案 16 :(得分:0)

Android资源非常不错HTML markup support
支持以下HTML元素:

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=”…”>

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

例如,删除线将如下所示:

<string name="cost"><strike>$10</strike> $5 a month</string>

答案 17 :(得分:-1)

我是在常规(本地)TextView上完成此操作,它应该适用于远程变体,因为文档将方法列为两者之间的等效方法:

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