String从任何浏览器页面复制时,pasteData正常工作.但是,SpannedString从邮件发送项目编辑器(字段)复制时,应用程序崩溃并显示以下错误消息:
java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)
我的代码:
// since the clipboard contains plain text.
ClipData.Item item = clipBoard.getPrimaryClip().getItemAt(0);
// Gets the clipboard as text.
String pasteData = new String();
pasteData = (String) item.getText();
Run Code Online (Sandbox Code Playgroud)
其中ClipboardManager实例定义clipBoard如下:
clipBoard = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener(new ClipboardListener());
Run Code Online (Sandbox Code Playgroud)
所有我想要做的是使用pasteData中String的格式.如何摆脱这个错误?任何帮助表示赞赏.
我需要在android中创建一个自定义文本视图,首先它应该是合理的,然后它应该支持跨度,虽然它应该支持RTL(从右到左)语言ex:Farsi(波斯语),...
我在这个问题上工作了一个星期!但实际上我陷入了困境,因为没有可用的库支持所有这些条件(Justify,Spanable,RTL)
你有什么想法吗?
我虽然为ex:Link检查了很多库
我正在构建一个富文本编辑器.我已经实现了像粗体斜体等文本格式以及像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)
怎么做 ?举个例子?或者要遵循什么程序?
我SpannableString用第一个字符创建了一个,而后两个小于其余字符.它看起来像这样:
sBBBBss
Run Code Online (Sandbox Code Playgroud)
我想对齐较小的字符,使它们与较大文本的顶部对齐,而不是与底部对齐(如此处所示).
这可能吗?
我想我正在寻找像这样的伪代码:
myAmount.setSpan(new RelativeAlignSpan(View.TOP),0,1,0);
我唯一的另一种选择是使用多个TextView创建一个新的布局,我可以独立填充,然后我可以对齐.我认为这有点混乱,并且更喜欢使用SpannableString方法.
我搜索了互联网并尝试了以下代码,但它无法正常工作
SpannableString ss1 = new SpannableString("Health: ");
ss1.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, ss1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textview1.setText("\n"+ss1+strhealth+"\n\n");
Run Code Online (Sandbox Code Playgroud)
我希望输出像这样 健康:好
strhealth = good但是它出来了健康:好的是什么错误?
我正在使用android studio 2.1.1
我正在使用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()) {
Uri uri = Uri.fromFile(file);
uris.add(uri);
}
} catch (Exception e) {
LOG.e("EmailComposer", "Error adding an attachment: " + e.toString());
}
}
if (uris.size() > 0) { …Run Code Online (Sandbox Code Playgroud) 我创建了一个数组,然后将其加载到HashMap中,然后我在ExpandableListView中使用它.但是,我想让部分数据显示下标和上标用于指数.经过大量的谷歌搜索,上标和下标的解决方案似乎使用这样的东西:
text.setText(Html.fromHtml(getString(R.string.acceleration)))
Run Code Online (Sandbox Code Playgroud)
在存储在引用中的字符串对象中使用HTML格式化.但是,这可以使用TextView或按钮,而不是ListView.问题是我现在意识到这实际上创建了一个Spannable对象,我对它知之甚少,但是理解它不是一个字符串,所以我不能把它添加到我的数组中的字符串末尾就像我原以为.我的数组看起来像这样:
constant_common_data = new ListViewItem[]
{
new ListViewItem(R.drawable.star, "Atomic Mass Constant ", "1.660 539 040 e-27", "kg", "0.000 000 020 e-27"),
new ListViewItem(R.drawable.star, "Avogadro Constant", "6.022 140 857 e23"," mol^-1", "0.000 000 074 x e23"),
new ListViewItem(R.drawable.star, "Boltzmann Constant", "1.380 648 52 e-23", "K^-1", "0.000 000 79 e-23"),
new ListViewItem(R.drawable.star, "Conductance Quantum", "7.748 091 7310 e-5", "s","0.000 000 0018 e-5"),
new ListViewItem(R.drawable.star, "Electric Constant", "8.854 187 817... e-12", "F m^-1", "(exact)"),
new ListViewItem(R.drawable.star, "Electron mass", "9.109 383 56 …Run Code Online (Sandbox Code Playgroud) 我过去几天一直试图弄清楚这一点,并没有成功......
我现在正在学习机器人,目前正在创建一个带有历史记录的计算器作为我的学习项目.我有一个TextView负责显示所有历史...我使用的数字字体看起来像一个计算器字体,但这只适用于数字,小数和逗号.我希望所有操作符都以不同的字体突出显示(Arial Narrow).我已经能够使用spannable字符串精美地工作,我指定字体颜色以及使用CustomTypeFaceSpan类来应用我的自定义字体的字体.
问题...当我混合使用字体时,行高似乎存在问题,所以我发现这篇文章演示了如何使用另一个自定义类来为每个添加的spannable文本行应用行高:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,我无法弄清楚为什么.如果我不应用不同的字体,那么它会按预期显示,第一行上方没有空格,行间距约为5px.当我应用替代字体时,在第一行文本上方有一个大约10到15px的空间,行间距大约相同10到15px.
字体大小没有区别,只有字体.我错过了什么 我实现了CustomLineHeightSpan,它实现了LineHeightSpan并覆盖了chooseHeight方法.我称之为:
WordtoSpan.setSpan(new CustomLineHeightSpan(10),operatorPositions.get(ii),operatorPositions.get(ii)+ 1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
我对CustomLineHeightSpan的调用似乎并不重要.没有什么变化...
任何人都知道我错过了什么......我确信这是一个"我不敢相信我错过了"的答案,但目前似乎无法弄明白.
谢谢你们的帮助:-)
我知道SpannableString可以在一个textview中设置不同的文本大小,但是如果以编程方式添加textview则它不起作用.
String s = "Best Ever";
SpannableString ss1 = new SpannableString(s);
ss1.setSpan(new RelativeSizeSpan(2f), 0, 4, 0); // set size
ss1.setSpan(new ForegroundColorSpan(Color.RED), 0, 4, 0); // set color
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(ss1);
Run Code Online (Sandbox Code Playgroud) 我们知道, JetpackCompose 中的AnnotatedString提供了Android 的 SpannedString的一些 API 。
但我没有找到任何方法/解决方法将ImageSpan内联到文本(使用 AndroidView 除外)
android spannablestring spannable android-jetpack-compose android-jetpack-compose-text
android ×10
spannablestring ×10
java ×3
textview ×3
spannable ×2
string ×2
android-jetpack-compose-text ×1
arrays ×1
clipboard ×1
cordova ×1
text-justify ×1