Articles of spannablestring

有什么办法可以在不中断文本的情况下在TextView中插入ImageSpan?

看来,为了添加一个ImageSpan到Android中的Spannable,我必须用Image来实际replace一些文本。 例如: Spannable span = new SpannableString("Foo imageplace Bar!"); Drawable android = context.getResources().getDrawable(R.drawable.android); android.setBounds(0, 0, 32,32); ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE); span.setSpan(image, 4, 14, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 这将用图像replace“imageplace”。 因为我正在处理复杂的多范围文本和重复,所以在我想要android图标的每个位置插入无意义的文本都有点让人头疼。 但是看起来,如果跨度的开始和结束是相同的,图像将不被包括在内。 有没有办法解决?

Html标签处理程序没有在Android N中调用“ul”,“li”

我们的应用程序中有一个自定义的TagHandler ,用于项目符号列表等。 html = "<ul><li>First item</li><li>Second item</li></ul>"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY, null, new ListHTMLTagHandler(density)); } else { //noinspection deprecation result = Html.fromHtml(html, null, new ListHTMLTagHandler(density)); } 我的TagHandler的handleTag()函数是在API-23及以下版本中为ul , li调用的,但在API-24(Android N)中没有调用。

将不同的字体和颜色设置为TextView的一部分

我试过这个: String s = "Some big string" SpannableStringBuilder sb = new SpannableStringBuilder(s); //normal font for 1st 9 chars sb.setSpan(robotoRegular, 0,9,Spannable.SPAN_INCLUSIVE_INCLUSIVE); //bold font for rest of the chars sb.setSpan(robotoBold, 9,s.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE); //also change color for rest of the chars sb.setSpan(new ForegroundColorSpan(Color.BLACK), 9,s.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE); textView.setText(sb); 但是这不起作用。 它只需要最新的setSpan,即..文本颜色正在改变,但不是字体。

java.lang.ClassCastException:android.text.SpannableStringBuilder不能转换为java.util.ArrayList

我正在使用phonegap Android插件:EmailComposerwithAttachments https://github.com/phonegap/phonegap-plugins/tree/master/Android/EmailComposerWithAttachments ,执行startActivitywithResult函数时发生以下错误。 我正在使用Android 4.2和Cordova 2.5.0 java.lang.ClassCastException:android.text.SpannableStringBuilder不能转换为java.util.ArrayList // setting attachments try { JSONArray attachments = parameters.getJSONArray("attachments"); if (attachments != null && attachments.length() > 0) { ArrayList<Uri> uris = new ArrayList<Uri>(); //convert from paths to Android friendly Parcelable Uri's for (int i=0; i<attachments.length(); i++) { try { File file = new File(attachments.getString(i)); if (file.exists()) { […]

将ImageSpanalignment到TextView的顶部

目前,我希望在文本之间添加图像,并将其alignment到TextView的顶部。 像这样的东西: 我能find的唯一的垂直alignment方式是基线(它似乎把它放在文本的中心)并alignment底部。 如果我使用ALIGN_BASELINE会发生什么: 有没有办法把它alignment到顶部? 我目前的代码: txtView.setText(this.addImageAsterisk( "The string to have asterisk at the end*"), BufferType.SPANNABLE); 然后 private CharSequence addImageAsterisk(String string) { Drawable d = context.getResources().getDrawable(R.drawable.img_asterisk); ImageSpan imageSpan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); final SpannableString spannableString = new SpannableString(string); spannableString.setSpan(imageSpan, string.length()-1, string.length(), 0); return spannableString; } 删除ImageSpan.ALIGN_BASELINE将其设置为alignment到底部,这也不是我的预期结果。 —谢谢用户Lalit Poptani,我尝试应用你的答案 – 应用这个之后,会发生什么是整个textview似乎有额外的余量顶部。 在应用span之前: This is the text* […]

我怎样才能有可点击的Spannables的EditText,仍然可以通过longClickselect?

我有TextViewtypes跨度ClickableStringSpan定义如下: public class ClickableStringSpan extends ClickableSpan { private View.OnClickListener mListener; int color; public ClickableStringSpan(View.OnClickListener listener,int color) { mListener = listener; this.color = color; } @Override public void onClick(View v) { mListener.onClick(v); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); ds.setColor(color); } } 我在我的文字上设置了可点击的跨度: spanStr.setSpan(new ClickableString(new linkedTextClickListener(), linkColor), startIndex, endIndex, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE); 现在我想将这些string应用于EditText而不是TextViews。 一切都很好,可点击的string现在不再被点击了。 我想知道如何将这种跨度的点击传递给他们指定的clicklistener? 更新:我主要关心编辑文本是我想让用户select文本的一部分,并与他分享,同时他/她可以点击ClickableSpans。

从EditText获取Spannablestring

我已经将SpannableString设置为EditText,现在我想从EditText中获取此文本并获取其标记信息。 我试过这样 SpannableStringBuilder spanStr = (SpannableStringBuilder) et.getText().; int boldIndex = spanStr.getSpanStart(new StyleSpan(Typeface.BOLD)); int italicIndex = spanStr.getSpanStart(new StyleSpan(Typeface.ITALIC)); 但它给大胆和斜体索引-1,虽然它显示斜体和大胆的文字。 请帮忙。

Android Spannable线高度

在过去的几天里,我一直在想这个问题,并没有成功。 我现在正在学习android,现在正在创build一个带有历史logging的计算器作为我的学习项目。 我有一个负责显示所有历史logging的TextView …我使用的数字字体看起来像一个计算器字体,但这只适用于数字和小数点以及逗号。 我希望所有的操作员都能以不同的字体突出显示(Arial Narrow目前)。 我已经能够得到这个漂亮的工作使用spannablestring,我指定一个字体的颜色以及使用CustomTypeFaceSpan类应用我的自定义字体的字体。 问题…当我混合的字体,似乎有一个线高度的问题,所以我发现这个post ,演示使用另一个自定义的类应用线高度添加到每个可扩展的文本行: public class CustomLineHeightSpan implements LineHeightSpan{ private final int height; public CustomLineHeightSpan(int height){ this.height = height; } @Override public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, FontMetricsInt fm) { fm.bottom += height; fm.descent += height; } } 这似乎并没有工作,我不明白为什么。 如果我不应用不同的字体,则按预期方式显示,第一行之上没有空格,行之间的间距大约为5px。 当我应用替代字体时,第一行文本上方的空间大约为10到15像素,行间距大约相同,为10到15像素。 字体大小没有区别,只有字体。 我错过了什么。 我实现了实现LineHeightSpan并重写chooseHeight方法的CustomLineHeightSpan。 […]

如何在TextView中的每个单词上使用onTouchListeners?

我想将onTouchListeners分配给TextView中的每个单词。 (不要链接到互联网上的东西,而只是继续在应用程序内的游戏逻辑)。 我的游戏在这一点上的一般行为是看到一个TextView,触摸一个单词,如果它是你赢的目标词,否则加载另一个TextView基于你触摸和重复的单词。 我现在完成的方式是使用ClickableSpans和onClicks来表示每个单词。 但我宁愿使用onTouchListeners,这样我就可以在touch_down上更改单词背景的颜色,并在touch_up上执行游戏逻辑,使其看起来更具响应性。 我怎样才能做到这一点? final TextView defTV = (TextView) findViewById(R.id.defTV); text = new SpannableString(rv); // rv is the future clickable TextView text ClickableSpan clickableSpan = null; String regex = "\\w+"; Pattern p = Pattern.compile(regex); Matcher matcher = p.matcher(text); while (matcher.find()) { final int begin = matcher.start(); final int end = matcher.end(); clickableSpan = […]

用string中的图像replace字符,然后设置为Textview

This is 🙂 and want to 🙂 replace with 😀 new image. 我有这种types的string,这是我从EditTextbox.NOw得到我想用image1和“:D”与image2.I想要像string.replaceall(“:)”,image1)和string.replaceall(“:D”,image2)。所以有人可以build议我如何做到这一点与小代码,也有更好的performance.I编写代码,它工作也很好,但它需要很多时间。 textview.setText(getSmiledText(ctx, stringvalue)); private static final HashMap<String, Integer> emoticons = new HashMap<String, Integer>(); static { emoticons.put(":)", R.drawable.j1); emoticons.put(":D", R.drawable.j2);} public static Spannable getSmiledText(Context context, String s) { int index; SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append(s); for (index = 0; index < builder.length(); index++) […]