使用setSpan()保存应用于文本的文本样式

时间:2013-07-13 16:39:10

标签: android

大家好,              我在编辑文本中有一堆文本,我已经设置为使用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);

1 个答案:

答案 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()通话之前开始的字符串不匹配。