高手请回答:editText如何保存带样式的文字

xiaottyy 2018-05-11 08:34:13
我用xamarin写一个记事本,第一次写手机程序就遇到一个难题。editeText里面输入的文字我用SpannableString编排富文本格式,文字已经成功的变换颜色字体,但是我editeText.text 获取的内容保存数据库,发现无论怎么操作都是纯文本,根本都不是含样式的那段,网上找了一天貌似没人有这样的疑问,我实在想出来了,请教各位为什么呢?

EditText mysss = FindViewById<EditText>(Resource.Id.custMEDITtextView1);

SpannableString spannableString = new SpannableString(mysss.TextFormatted);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.ParseColor("#03945E"));
spannableString.SetSpan(colorSpan, mysss.SelectionStart, mysss.SelectionEnd, SpanTypes.ExclusiveExclusive);
mysss.SetText(spannableString, TextView.BufferType.Spannable);
Toast.MakeText(this, "单击:" + mysss.Text, ToastLength.Short).Show();//这里弹出来的都是纯文本没有格式化的文字, 我用单独一个textView获取这个内容也都是纯文字没有含样式。
...全文
886 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bt侠 2018-05-11
  • 打赏
  • 举报
回复
引用 12 楼 xiaottyy 的回复:
我刚才又验证了一下,得到正确的富文本格式应该是 Java.Lang.ICharSequence 这个定义。 用Toast显示格式都是正确的, 但是插入数据库系统会自动tostring。一旦tostring又变成纯文本。 我现在想不出好的办法能插入数据库。
LZ看楼上.数据库肯定不支持ICharSequence 类型啊,要么你数据库添加别的字段存储这段文字对应的span信息,要么你直接转换成Json字符串存储
xiaottyy 2018-05-11
  • 打赏
  • 举报
回复
我刚才又验证了一下,得到正确的富文本格式应该是 Java.Lang.ICharSequence 这个定义。 用Toast显示格式都是正确的, 但是插入数据库系统会自动tostring。一旦tostring又变成纯文本。 我现在想不出好的办法能插入数据库。
bt侠 2018-05-11
  • 打赏
  • 举报
回复
引用 10 楼 xiaottyy 的回复:
非常感谢 bt侠 的回答。 我偷懒用的xamarin编写,没有用android原生编写。 现在发现掉入一个巨坑。 android里面.getText()是可以得到富文本格式。 但是xamarin里面只有textview.text 这属性。这属性得到是string 跟android格式不一致,转换结果就是纯文本。 现在我用SpannedString得到富文本格式,但是继续面临一个问题,数据库只能插入string格式。我插入数据库怎么把富文本转成可接受string,崩溃阿!!!! 我都想放弃xamarin了
将SpannedString转换成自定义model,之后转换成Json,存储Json数据,之后取出json数据解析成model 例如,自定义MySpannedString继承SpannedString,然后每个属性添加get和set方法,通过Gson以MySpannedString为model转换为Json字符串存储.之后取出数据再用Gson解析出MySpannedString对象. 以上只是个人思路,没有经过实践,LZ自行测试
xiaottyy 2018-05-11
  • 打赏
  • 举报
回复
非常感谢 bt侠 的回答。 我偷懒用的xamarin编写,没有用android原生编写。 现在发现掉入一个巨坑。 android里面.getText()是可以得到富文本格式。 但是xamarin里面只有textview.text 这属性。这属性得到是string 跟android格式不一致,转换结果就是纯文本。 现在我用SpannedString得到富文本格式,但是继续面临一个问题,数据库只能插入string格式。我插入数据库怎么把富文本转成可接受string,崩溃阿!!!! 我都想放弃xamarin了
bt侠 2018-05-11
  • 打赏
  • 举报
回复
TextView textView = (TextView) findViewById(R.id.test_tv);
TextView textView2 = (TextView) findViewById(R.id.test_tv2);
SpannableString spannableString = new SpannableString("aaa");
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.YELLOW);
spannableString.setSpan(colorSpan, 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
SpannedString spannable = (SpannedString) textView.getText();
textView2.setText(spannable);


如图所示,我获取了第一个textview的内容显示在了第二个textview上,可以强制转换为SpannedString 对象,具体怎么保存你自己操作就好
bt侠 2018-05-11
  • 打赏
  • 举报
回复
引用 8 楼 qq_28339011 的回复:
TextView textView = (TextView) findViewById(R.id.test_tv);
        TextView textView2 = (TextView) findViewById(R.id.test_tv2);
        SpannableString spannableString = new SpannableString("aaa");
        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.YELLOW);
        spannableString.setSpan(colorSpan, 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView.setText(spannableString);
        SpannedString spannable = (SpannedString) textView.getText();
        textView2.setText(spannable);
如图所示,我获取了第一个textview的内容显示在了第二个textview上,可以强制转换为SpannedString 对象,具体怎么保存你自己操作就好
说错,不是强制转换,是获取的数据本来就是SpannedString 类型,我猜你获取的时候应该是强制转换为了String才导致只有文字没有自定义属性的
xiaottyy 2018-05-11
  • 打赏
  • 举报
回复
引用 6 楼 qq_28339011 的回复:
我觉得@顽固已死_有事烧纸说的不错,一开始LZ没有表述明白,LZ的现在的意思是,存储到数据库的时候就是纯本文了是吧. 我觉得LZ需要看一下TextView的gettext方法,返回的是CharSequence类型,肯定不包含样式啊,你需要在输入的时候额外去存储文字信息和富文本信息
哥们你说的是对 ,我也觉得取出来的只是text纯文本格式,但是editText里面到底哪个函数能保存富文本的状态内容,我找了一天没有找到。
bt侠 2018-05-11
  • 打赏
  • 举报
回复
我觉得@顽固已死_有事烧纸说的不错,一开始LZ没有表述明白,LZ的现在的意思是,存储到数据库的时候就是纯本文了是吧. 我觉得LZ需要看一下TextView的gettext方法,返回的是CharSequence类型,肯定不包含样式啊,你需要在输入的时候额外去存储文字信息和富文本信息
xiaottyy 2018-05-11
  • 打赏
  • 举报
回复
引用 3 楼 cxz003 的回复:
你用自带的TextView当然显示不了富文本 你得自己定制啊
TextView是可以显示富文本的,我是用editText编辑内容,TextView测试显示效果。。 无论editText富文本状态如何处理,保存到数据库都是纯文本,都是不含任何样式的内容。读取到editText富文本都消失了只剩下纯文本, 这样说你能理解了吗?
  • 打赏
  • 举报
回复
你的标题是editText如何保存带样式的文字 帖子的内容确实怎么用 Toast 显示富文本。。
  • 打赏
  • 举报
回复
你用自带的TextView当然显示不了富文本 你得自己定制啊
xiaottyy 2018-05-11
  • 打赏
  • 举报
回复
引用 1 楼 cxz003 的回复:
你写富文本的时候保存一下呗 做缓存
你没理解,保存到数据库没问题,但是保存出来的数据是纯文本,不是富文本。
  • 打赏
  • 举报
回复
你写富文本的时候保存一下呗 做缓存

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧