Articles of spannable

如何使用支持库字体function作为TextView内容的一部分(使用spannable)?

背景 支持库( 此处为docs)允许您在XML中使用“res / font”文件夹中的TTF字体文件: app:fontFamily=”@font/lato_black” 或通过代码: val typeface = ResourcesCompat.getFont(context, R.font.lato_black) 问题 虽然我知道可以使用spannable技术在TextView内容的部分内容中设置不同的样式(例如粗体,斜体,颜色等等),但我发现设置不同字体的唯一方法就是使用操作系统的内置字体,如此处所示,但我无法看到一种方法来为新的方式加载字体。 我试过的 我试图find一种方法来转换两者,但没有运气。 当然,我也试图在可能的function的文档中find,我试图通过互联网find它。 这个问题 如何为TextView的不同部分设置不同的字体? 例如,在文本“Hello world”中,将“Hello”设置为“lato_black”的字体,其余为默认值。 编辑:由于我得到了来自两个不同的人的相同答案,我不能接受另一个。 给他们两个+1的努力,我已经改变了一点问题: 我如何轻松地将字体样式设置为文本的一部分,同时让strings.xml文件使用自定义字体标记定义它。 例如,这可以在strings.xml文件中进行设置,如上所述: Hello world 然后,在代码中,您要做的就是使用以下内容: textView.setText (Html.fromHtml(text, null, CustomFontTagHandler())) 我认为这非常重要,因为翻译后的字符串可能与英语中的字符串差别太大,因此您不能只解析字符串的文本,然后选择设置自定义字体的位置。 它必须在字符串文件中。

如何在android编辑文本中应用Bullet和编号列表

我想在用户按下按钮时在android编辑文本中应用项目符号列表和编号列表。 为此,我尝试了下面的代码。 对于子弹 BulletSpan[] quoteSpan = str.getSpans(selectionStart, selectionEnd, BulletSpan.class); // If the selected text-part already has UNDERLINE style on it, then we need to disable it for (int i = 0; i < quoteSpan.length; i++) { str.removeSpan(quoteSpan[i]); exists = true; } // Else we set UNDERLINE style on it if (!exists) { str.setSpan(new BulletSpan(10), selectionStart, […]

如何对TextView中的每个单词进行alpha / translateanimation而不是每个单词?

我正在使用下面的Spannable和TextView ,我已经让它为每个角色制作animation,但我想为每个单词设置animation,我该如何实现? 寻找alpha并翻译每个单词(从每个单词的位置底部)。 通过翻译我的意思是翻译(移动)animation。 资源: private static class FadeyTextView extends TextView { private Interpolator mInterpolator; private long mStart, mDurationPerLetter; private boolean mAnimating = false; private SpannableString mFadeyText; private CharSequence mText; public FadeyTextView(Context context) { super(context); initView(); } public FadeyTextView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public FadeyTextView(Context context, AttributeSet attrs, int defStyle) { […]

Android Edittext Spannable问题

每次Edittext onAfterTextChange方法时,我都会检查是否输入了一些特殊字符串(来自functionlistvariables),然后更改该字符串的特殊颜色。 代码如下 for(String s:functionList) { final Pattern p = Pattern.compile(s); final Matcher matcher = p.matcher(inputStr); while(matcher.find()) { //if(matcher.end() – matcher.start()== s.length()) inputStr.setSpan(new ForegroundColorSpan(Color.parseColor(highlightColor)), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } 我不使用Html.FromHtml方法的原因是; 它迫使我使用setText方法更改光标位置,因为我的edittext也从按钮(按钮调用settext)更改,不仅是软键盘,settext方法废弃了光标位置,因为按钮更改将光标位置设置为0即使它不是 ! ! 因此我不能在软键盘中间添加一些东西(当我尝试添加时, cursorposition总是设置为0 )。 这就是为什么我必须使用spannable。 无论如何我的问题是,例如我的一个特殊文本是“日志”..当我输入日志它工作正常( 日志 ),当附加空格字符日志 ( 日志日志 )它再次工作正常, 但当我从第二次删除g日志,第一个日志颜色也消失了! (log lo)哪一定不应该发生。 认为粗体日志是彩色的…… 为什么会这样?

ImageText上的ImageSpan(表情符号)。 使用SwiftKey键盘不起作用

我正在做一个简单的聊天应用程序,我想在编写消息时在edittext上显示表情符号。 我有这个来识别图像将通过ImageSpan从图像中取代(仅当在EditText上插入表情符号时才会调用此字符): for (index = start; index editable.length()) continue; if(emoticons.containsKey(editable.subSequence(index, index + 1).toString())){ int length=1; Drawable drawable = context.getResources().getDrawable(emoticons.get(editable.subSequence(index, index + 1).toString())); Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); int size=Utils.GetDipsFromPixel(context, (int)(textSize*1.3)); Drawable d = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap, size, size, true)); int dWidth = d.getIntrinsicWidth(); int dHeight = d.getIntrinsicHeight(); d.setBounds(0 , -dHeight, dWidth, 0); ImageSpan span; span = […]

无法添加ForegroundColorSpan

SpannableStringBuilder sb = new SpannableStringBuilder(“Hello World”); ForegroundColorSpan fcs = new ForegroundColorSpan(R.color.text_blue); sb.setSpan(fcs, 5, 11,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); RES /价值/ color.xml #FF39ACEE 颜色已经改变了但是改变了别的东西,而不是我想要的蓝色。 谢谢。

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

我正在开发一个应用程序,用户从库中选择一个图像,它将添加到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中Emoticon的Unicode。 以前有人遇到过这个问题吗? 编辑:测试与android:imeOptions=”actionDone|flagNoExtractUi” ,不起作用,单词建议将掩盖我的EditText。

多个spannable设置时如何获取文本宽度

我为spannableText设置了span并将其设置为TextView。 在我想要获得此文本的宽度和高度之后。 但是结果没有考虑由于设定的跨度而导致的文本大小的变化。 下一个解决方案是错误的。 return textView.getPaint().measureText(text, 0, text.length());

为什么我的spannable没有显示?

背景 我试图在TextView上使用一个简单的SpannableString ,基于我发现的UnderDotSpan类( 这里 )。 原始的UnderDotSpan只在文本本身下方放置一个特定大小和颜色的点(不重叠)。 我正在尝试的是首先正常使用它,然后使用自定义的drawable而不是dot。 问题 与正常的跨度使用相反,这个只是没有显示任何东西。 甚至没有文字。 以下是正常跨度的完成方式: 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, […]