在Android小部件中删除文本的子字符串

在Android小部件中删除文本的子字符串,android,textview,widget,android-widget,strikethrough,Android,Textview,Widget,Android Widget,Strikethrough,我的android小部件中有一个文本视图,我只需要划过特定的文本行。我在一个小部件中的另一个问题中发现了这一点: RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget); // strike through text, this strikes through all text views.setInt(R.id.appwidget_text, "setPaintFlags",

我的android小部件中有一个文本视图,我只需要划过特定的文本行。我在一个小部件中的另一个问题中发现了这一点:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);

// strike through text, this strikes through all text
views.setInt(R.id.appwidget_text, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
问题是这会穿透文本视图中的所有文本。如何仅浏览文本视图的部分文本?

使用and

例如,要获得以下效果,请参见下面的代码段:



更酷的效果

Xoce的答案非常正确,但它更像是应用程序内文本视图的一般答案,但通过一些调整,我有办法为小部件实现这一点。(还要感谢Commonware将我推向了正确的方向

在updateAppWidget方法中,您可以使用远程视图将文本添加到textview。若要通过删除来自定义textview文本的子字符串,请使用可设置跨距的字符串生成器(您还可以使用不同的跨距来实现粗体、下划线、斜体等)

以下是我所做的:

static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                            int appWidgetId) {
    CharSequence widgetText = NewAppWidgetConfigureActivity.loadTitlePref(context, appWidgetId, NewAppWidgetConfigureActivity.TEXT_KEY);
    // Construct the RemoteViews object
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);

    SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(widgetText);
    StrikethroughSpan strikethroughSpan = new StrikethroughSpan();

    spannableStringBuilder.setSpan(strikethroughSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    views.setTextViewText(R.id.appwidget_text, spannableStringBuilder);

    ...

}

也许可以使用
SpannableStringBuilder
删除框span
在你自己的应用程序中使用
TextView
就可以了;我没有尝试过通过
remoteview
传递
span
对象。我认为你在处理小部件时必须使用远程视图,这样span就不会工作,或者至少不会工作我找不到将span应用于远程视图的方法。使用
CharSequence
,这通常意味着它接受
SpannableStringBuilder
。哇。我觉得自己很笨。谢谢,这确实有效。我做了这么久,以至于完全忽略了它。我认为这不管用。你用小部件测试过这个吗?我是pretty确定您必须使用远程视图。我没有直接访问文本视图的权限。好的,我明白了…让我检查一下如何更改笔划颜色?ForegroundColorSpan更改文本颜色。
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                            int appWidgetId) {
    CharSequence widgetText = NewAppWidgetConfigureActivity.loadTitlePref(context, appWidgetId, NewAppWidgetConfigureActivity.TEXT_KEY);
    // Construct the RemoteViews object
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);

    SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(widgetText);
    StrikethroughSpan strikethroughSpan = new StrikethroughSpan();

    spannableStringBuilder.setSpan(strikethroughSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    views.setTextViewText(R.id.appwidget_text, spannableStringBuilder);

    ...

}