我在android nougat上使用以下代码并且它正在工作: -
Html.fromHtml("<strike> " + myText + "</strike"));
但是在Marshemellow它没有用,我的意思是<strike>
标签。
有没有办法在所有设备上工作?
myText
是在recyleView中收到的动态文本:
public void onBindViewHolder(final DealsAdapter.MyViewHolder holder, final int position) {
final DataDeals feedItem = feedItemList.get(position);
用法: -
holder.oldPrice.setText(fromHtml("<strike>" + feedItem.getOldPrice() + "</strike>"));
答案 0 :(得分:2)
我遇到的问题是StrikethroughSpan在RecyclerView项目布局内的TextView上没有工作(对于某些设备)。它在我的Pixel OS 8.1上运行良好,但在Nexus 6 OS 7.1.1上无效。
在我的情况下,我意识到布局中的一些约束导致了这个问题。我改变了我实现布局的方式,并且StrikethroughSpan再次开始工作。注意具有wrap_content宽度和高度的TextViews,并将其定位在Relative布局中。可能影响TextView大小的事情可能会导致此问题。不幸的是,我没有找到问题的根本原因,但我希望这可以帮助其他有类似问题的人。
作为一个说明,两个解决方案都可以帮助我完成文本工作:
Html.fromHtml("<strike> " + myText + "</strike"));
或
SpannableStringBuilder spanText = new SpannableStringBuilder("my_awesome_text");
spanText.setSpan(new StrikethroughSpan(), 0, textToBeDisplayed.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
myTextView.setText(spanText);
答案 1 :(得分:1)
此方法已弃用。
我应该使用这段代码:
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
Spanned result;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
} else {
result = Html.fromHtml(html);
}
return result;
}
用法:
fromHtml("<strike> " + myText + "</strike"));
修改强>
不要忘记关闭三角支架:
fromHtml("<strike> " + myText + "</strike>"));
而不是你的:fromHtml("<strike> " + myText + "</strike"));
答案 2 :(得分:0)
除了Vyacheslav提到的内容外,请检查您的TextView上是否未设置任何字体系列。我花了将近4个小时来调试此问题,并从TextView中删除了FontFamily才解决了我的问题。