0

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

1 回答 1

2

我需要添加一些代码来保存样式吗?

是的。

据推测,现在,您只是保存thisIsYourEditText.getText().toString()到数据库中,然后thisIsYourEditText.setText(stringThatYouLoadBackOutOfYourDatabase)用于填充EditText.

相反,您需要使用Html.toHtml(thisIsYourEditText.getText())尝试将样式化文本转换为 HTML,然后使用thisIsYourEditText.setText(Html.fromHtml(stringThatYouLoadBackOutOfYourDatabase))将该 HTML 转换回样式化文本。

请注意,toHtml()并且fromHtml()不处理所有可能的CharacterStyles,也不保证在往返过程中正确执行所有样式(即,由 生成的字符串toHtml()可能与您在调用之前开始使用的字符串不匹配fromHtml())。

于 2013-07-13T16:43:55.710 回答