Articles of spannable

对齐ImageSpan中心垂直周围的文本

我在一段文字中有一个ImageSpan 。 我注意到的是,周围的文本总是在文本行的底部绘制 – 更准确地说,文本行的大小随图像一起增长,但文本的基线不会向上移动。 当图像明显大于文本大小时,效果相当难看。 这是一个示例,大纲显示TextView边界: 我试图让周围的文本相对于正在显示的图像垂直居中。 以下是蓝色文本显示所需位置的相同示例: 以下是我受约束的约束: 我不能使用复合drawables。 图像必须能够在单词之间显示。 根据内容,文本可以是多行的。 我无法控制这一点。 我的图像比周围的文字大,我不能减小它们的大小。 虽然上面的示例图像大于实际图像(以演示当前行为),但实际图像仍然足够大以至于这个问题是显而易见的。 我尝试在TextView上使用android:gravity=”center_vertical”属性,但这没有任何效果。 我相信这只是文本行的垂直居中,但在文本行中,文本仍然在底部绘制。 我目前的思路是创建一个自定义跨度,根据行的高度和当前文本大小来移动文本的基线。 这个范围将涵盖整个文本,我将不得不计算与ImageSpan的交集,所以我也可以避免移动图像。 这听起来相当令人生畏,我希望有人能提出另一种方法。 任何和所有帮助表示赞赏!

如何在editText中处理imageSpan上的onClick事件?

我正在一个应用程序中,用户从画廊中select一个图像,它将被添加到editText,现在我想如果用户点击editText中的图像,它应该在fullScreen中打开,我使用下面的代码: public void addToEdt(Bitmap bitmap){ SpannableString ss = new SpannableString("abc"); Drawable d = new BitmapDrawable(getResources(), bitmap); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); edt_note.setTransformationMethod(null); edt_note.getText().insert(edt_note.getSelectionStart(), ss); final int start = ss.getSpanStart(span); final int end = ss.getSpanEnd(span); ClickableSpan click_span = new ClickableSpan() { @Override public void onClick(View widget) { […]

SpannableString在横向模式下显示不正确

我有一段代码,使用SpannableString将一些图像添加到EditText中,如下所示: SpannableString ss = new SpannableString("Some random String in my application."); Drawable d = getResources().getDrawable(R.drawable.emoticon_0001); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM); ss.setSpan(span, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 我之间有一些指数计算,因为它们不重要。 代码工作正常。 这里有一些它的形象: 非编辑模式下的纵向和横向: 但是,一旦我开始在风景模式下编辑,图像后面的文本出现: 大多数人都知道,怪异的string表示iPhone中表情符号的Unicode。 有没有人遇到过这个问题? 编辑:用android:imeOptions="actionDone|flagNoExtractUi" ,不起作用,单词build议将掩盖我的EditText。

我的spannable怎么没有显示?

背景 我想在TextView上使用一个简单的SpannableString ,基于我发现的一个UnderDotSpan类( 这里 )。 原来的UnderDotSpan只是在文本下面放置一个特定大小和颜色的点(不重叠)。 我正在尝试的是先正常使用它,然后使用自定义的drawable而不是点。 问题 与正常的跨度使用相反,这只是不显示任何东西。 甚至没有文字。 这是如何完成一个正常的跨度: val text = "1" val timeSpannable = SpannableString(text) timeSpannable.setSpan(ForegroundColorSpan(0xff00ff00.toInt()), 0, text.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) textView.setText(timeSpannable); 它将在TextView中显示一个绿色的“1”。 但是,当我尝试下一个spannable,它(整个TextView的内容:文本和点)根本不显示: val text = "1" val spannable = SpannableString(text) spannable.setSpan(UnderDotSpan(this@MainActivity, 0xFF039BE5.toInt(), textView.currentTextColor), 0, text.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) textView.setText(spannable, TextView.BufferType.SPANNABLE) // this also didn't work: textView.setText(spannable) 奇怪的是,在我使用的一个项目中,它在RecyclerView中工作正常,而在另一个项目中,它却没有。 这里是UnderDotSpan的代码: class UnderDotSpan(private val mDotSize: Float, […]

Android:如何将Spannable.setSpan和String.format结合起来?

我将Span设置为文本的一部分。 跨度本身运作良好。 然而,文本是由Resources的String.format创build的,我不知道文本中的部分的start和end ,我将设置跨度为。 我尝试在strings.xml使用自定义HTML标记,但getText或getString删除它们。 我可以使用像这样的getString(R.string.text, "<nb>" + arg + "</nb>") ,然后Html.fromHtml() ,因为arg正是我想要设置Span的地方。 我看到这种使用文本格式"normal text ##span here## normal text" 。 它parsingstring,删除标签并设置Span。 我的问题是,是否有更好的方法来完成将span设置为如"something %s something"格式化string还是应该使用上述方法之一?

在EditText中,是否有一种方法来禁用span上的自动更正?

我有一个可以自定义跨度的EditText ,我不希望它们成为拼写检查的一部分。 我知道我可以使用标志android:inputType=textNoSuggestions来完全禁用这些build议,但是我想根据光标的位置以及是否对焦来处理它。 有任何想法吗?

向Spannable添加填充/边距

我正在使用BackgroundColorSpan来自定义TextView部分。 这是我有的代码: String s = "9.5 Excellent!"; s.setSpan(new BackgroundColorSpan(darkBlue, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new BackgroundColorSpan(darkBlue, 3, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 这给了我以下结果: 这就是我想要实现的: 正如你所看到的,我正在试图为“9.5”和“优秀”添加填充。 string,但我一直无法find解决scheme。 有没有办法将这种填充/边距添加到这些Spannables?

Android SpannableString在文本的后面设置背景

我想创build一个类似于这个图像上看到的东西: 我设法用SpannableStringBuilder创buildevertyhing,除了橙色的圆angular矩形。 我可以使用BackgroundColorSpan将背景设置为该颜色,但我无法find使其圆整的方法。 任何想法我怎么能做到这一点? 提前致谢! 编辑:我使用Xamarin.Android,但这里是我的代码: stringBuilder.SetSpan(new BackgroundColorSpan(Application.Context.Resources.GetColor(Resource.Color.orangeColor)), stringBuilder.Length() – length, stringBuilder.Length(), SpanTypes.ExclusiveExclusive);

带有Spannable的buttonsetText不适用于Android 5.0 Lollipop

我有一个简单的Button : <Button android:id="@+id/test" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 并尝试通过以下方式更改文本属性: SpannableString span = new SpannableString(text); span.setSpan(new AbsoluteSizeSpan(8, true), 5, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); testButton.setText(span); 它适用于Android 4.3,但不适用于5.0。 有趣的事情是,当我从Button更改为TextView它工作正常5.0。 似乎是在棒棒糖Button东西。

结合Spannable和String.format()

假设你有以下string: String s = "The cold hand reaches for the %1$s %2$s Ellesse's"; String old = "old"; String tan = "tan"; String formatted = String.format(s,old,tan); //"The cold hand reaches for the old tan Ellesse's" 假设你想结束这个string,但也有一个特定的Span设置为由String.formatreplace的任何字。 例如,我们也想做以下事情: Spannable spannable = new SpannableString(formatted); spannable.setSpan(new StrikethroughSpan(), oldStart, oldStart+old.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannable.setSpan(new ForegroundColorSpan(Color.BLUE), tanStart, tanStart+tan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 是否有一个强大的方法来了解old和tan的开始指数? 请注意,只要search“旧”,就会在“冷”中返回“旧”,这样就不会起作用。 我猜, 预计会有什么效果,正在search%[0-9]$s […]