如何在Android 中的TextView/ EditText中选择一个单词.我在TextView/中有一些文本,EditText当用户点击一个单词时,我希望选择该单词,之后当我调用getSelectedText()方法时,它应该返回所选单词.任何帮助,将不胜感激.
我的目标是在用户点击TextView/中的特定单词时执行一些操作EditText.
如何通过单击带有两个不同单词的文本视图来移动到另一个视图.这是我正在使用的字符串.
By clicking Sign Up, you are indicating that you have read and agree to the
Term of Use and Privacy Policy.
Run Code Online (Sandbox Code Playgroud)
我想用不同的颜色和可点击的这两个词(使用条款,隐私政策).
我知道要为特定单词制作颜色.我想让它可点击.
您好我在textview中设置了一些文本.
TextView tweet = (TextView) vi.findViewById(R.id.text);
tweet.setText(Html.fromHtml(sb.toString()));
Run Code Online (Sandbox Code Playgroud)
然后我需要将文本转换TextView为Spannble.所以我这样做:
Spannable s = (Spannable) tweet.getText();
Run Code Online (Sandbox Code Playgroud)
我需要转换它,Spannable因为我传入了TextView一个函数:
private void stripUnderlines(TextView textView) {
Spannable s = (Spannable) textView.getText();
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
private class URLSpanNoUnderline extends URLSpan {
public URLSpanNoUnderline(String url) {
super(url);
}
@Override
public void updateDrawState(TextPaint …Run Code Online (Sandbox Code Playgroud) 我正在使用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);
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:

这就是我想要实现的目标:

正如你所看到的,我正在尝试为"9.5"添加填充以及"优秀!".字符串,但到目前为止我一直无法找到解决方案.
有没有办法将这个填充/边距添加到这些Spannables?
我正在构建一个富文本编辑器.我已经实现了像粗体斜体等文本格式以及像blockQuote这样的段落格式.现在我想在编辑器中添加图像,文本应该环绕它.我用SpannableString()and Spanned()和实现了所有这些StyleSpan().
我可以使用添加图像到一行ImageSpan(),但是将其添加到内联中并将其添加到一个字符的位置,我想要的是将其插入段落中,其余的文本应该环绕它.我可以通过以下代码在文本的开头添加图像..但我无法将其对齐中心和右边.
SpannableString string = new SpannableString("Text with icon and padding");
string.setSpan(new IconMarginSpan(bitmap, 30), 0, string.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)
怎么做 ?举个例子?或者要遵循什么程序?
我一直在阅读我正在研究的项目的Spanned/Spannable类的文档.我对包含MARK和包含的跨度的定义和用法感到困惑POINT.
A MARK似乎在Doc中被定义为"附加"到角色的位置,而a POINT被定义为"粘合"到角色.因此,MARK当文本被更改时,a POINT将不会移动,并且当文本被更改时,它将随着"粘合"的字符移动.
这些定义似乎表明它MARK是同义词,INCLUSIVE也POINT就是同义词EXCLUSIVE.
然而,这并不像既不的情况下SPAN_MARK_MARK,也不SPAN_POINT_POINT是具有任一同义SPAN_INCLUSIVE_INCLUSIVE或SPAN_EXCLUSIVE_EXCLUSIVE.实际上,SPAN_INCLUSIVE_INCLUSIVE是一样的SPAN_MARK_POINT,SPAN_POINT_MARK也是一样的SPAN_EXCLUSIVE_EXCLUSIVE.
我的问题如下
为什么是SPAN_POINT_MARK同义词SPAN_EXCLUSIVE_EXCLUSIVE?为什么是SPAN_MARK_POINT同义词SPAN_INCLUSIVE_INCLUSIVE?
为什么不SPAN_MARK_MARK和和分别SPAN_POINT_POINT是同义词?SPAN_INCLUSIVE_INCLUSIVESPAN_EXCLUSIVE_EXCLUSIVE
什么是真正的定义,MARK并POINT在这种用法?
我正在尝试将BackgroundColorSpan设置为我的编辑文本中的选定文本.因此,当我选择任何文本并单击按钮时,它会将背景颜色设置为该特定文本,然后我将该注释保存到我的带有.html格式的SD卡中,然后我再次检索该注释以便以相同的格式再次编辑.
我现在面临的问题是当我将BackgroundColorSpan应用于所选文本时,它显示的是我应用的背景颜色的字符串,但是一旦我将该注释保存到我的SD卡并重新打开,它就不会显示该特定字符串的背景颜色它显示我没有背景颜色的正常字符串.
下面是我用来将背景颜色设置为编辑文本选定区域的代码
mSpannable.setSpan(new BackgroundColorSpan(color),startSelection, endSelection, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)
以下是将我的笔记保存到SD卡的代码.
Spanned spannedText = edtNoteDescription.getText();
StringBuilder output = new StringBuilder();
AppHtml.withinHtml(output, spannedText);
File mFile = new File(Environment.getExternalStorageDirectory()
+ File.separator + "MyNote/");
}
File myFile = new File(mFile, "/" + strNoteTitle + ".html/");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(output);
myOutWriter.close();
fOut.close();
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我成功地能够以HTML格式保存我的文件,但我没有得到背景颜色的字符串.
我试图在日志中打印该字符串然后在w3School中粘贴该字符串然后我得到了我期望它的确切结果但是在android中我不知道为什么它不起作用.
我在Logcat中获得的字符串如下
<p><font color ="#7dff00">This</font> <font color ="#ff5100">Is</font>  a  <font color ="#04ff00"><b><font style = …Run Code Online (Sandbox Code Playgroud) 到目前为止我所做的是具有普通文本和可点击跨度的文本视图的列表视图:

单击我打开URL的跨度,单击textView周围的项目查看导致listView OnItemClickListener导航到项目详细信息,这很好:

现在的问题是:
触摸textView使普通文本有点突出显示(完全选择项目时具有相同的颜色),textView的OnTouchListener触摸事件触发但不触发OnFocusChangeListener事件,并且项目的视图不会获得选择样式.尝试FOCUS_BLOCK_DESCENDANTS了listView的所有变体,项目视图,focusable启用或禁用textView 具有相同的结果.
幸运的是,textView OnClickListener事件以这种方式触发,但这太丑了:由于所选文本颜色与项目颜色相同,因此文本是不可见的,而触摸未被释放,没有其他迹象表明用户将转到其他项目详细信息比那丑陋的文字消失了.
我怀疑发生这种情况是因为SpannabletextView 的内容是,并且不是CliclableSpan-s的部分以这种奇怪的方式运行.
一旦接触到普通文本,我是否有机会选择该项目?
listView项目布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:focusable="false" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:focusable="false"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<TextView
android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:focusable="false"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:focusable="false" …Run Code Online (Sandbox Code Playgroud) 我们知道, JetpackCompose 中的AnnotatedString提供了Android 的 SpannedString的一些 API 。
但我没有找到任何方法/解决方法将ImageSpan内联到文本(使用 AndroidView 除外)
android spannablestring spannable android-jetpack-compose android-jetpack-compose-text
我有一个EditText可以有自定义跨度,我不希望它们成为拼写检查的一部分.我知道我可以使用该标志android:inputType=textNoSuggestions完全禁止的建议,但我想处理它基于光标的位置,如果它是我的重点跨度与否.有任何想法吗?