大家好, 我在编辑文本中有一堆文本,我已经设置为使用Android中的setSpan方法进行样式设置(仅在目前通过)。这似乎工作正常。
我遇到的麻烦是,一旦我关闭该活动,所有样式似乎都会被取消。那是当我再次加载活动时,它只有纯文本而且没有使用setSpan()应用的样式。
注意:我的所有文本都存储在数据库中。
我附上了样式的所有代码,如果您需要查看更多代码,请告诉我。
private void doStrick() {
int selectionStart = mBodyText.getSelectionStart();
styleStart = selectionStart;
int selectionEnd = mBodyText.getSelectionEnd();
// check for boo-boo's
if (selectionStart > selectionEnd){
int temp = selectionEnd;
selectionEnd = selectionStart;
selectionStart = temp;
}
Spannable str = mBodyText.getText();
str.setSpan(new StrikethroughSpan(),selectionStart, selectionEnd, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
我需要添加一些代码才能保存样式吗?
根据回答编辑:
Calendar cal=Calendar.getInstance();
String date_time=String.format("%1$te %1$tB %1$tY,%1$tI:%1$tM:%1$tS %1$Tp",cal);
float Textsize = mBodyText.getTextSize();
String title = mTitleText.getText().toString();
String body = Html.toHtml(mBodyText.getText());
if (mRowId == null) {
long id = mDbHelper.createNote(title, body, date_time, Textsize);
if (id > 0) {
mRowId = id;
}
} else {
mDbHelper.updateNote(mRowId, title, body, date_time, Textsize);
Log.d("MYTAG", "updateing note");
updateWidget();
我在哪里填充字段:
Cursor note = mDbHelper.fetchNote(mRowId);
startManagingCursor(note);
mTitleText.setText(note.getString(
note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
mBodyText.setText(Html.fromHtml(note.getString(
note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY))));
mBodyText = (EditText) findViewById(R.id.body);
float size = note.getFloat(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TEXT_SIZE));
mBodyText.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
答案 0 :(得分:2)
我需要添加一些代码来保存样式吗?
是
据推测,现在,您只是将thisIsYourEditText.getText().toString()
保存到数据库中,然后使用thisIsYourEditText.setText(stringThatYouLoadBackOutOfYourDatabase)
填充EditText
。
相反,您需要使用Html.toHtml(thisIsYourEditText.getText())
尝试将样式化文本转换为HTML,然后使用thisIsYourEditText.setText(Html.fromHtml(stringThatYouLoadBackOutOfYourDatabase))
将该HTML转换回样式文本。
请注意,toHtml()
和fromHtml()
不会处理所有可能的CharacterStyles
,也不能保证所有样式都能正确地进行往返(即{{{}}生成的字符串1}}可能与您在toHtml()
通话之前开始的字符串不匹配。