EasyEditSpan如何在Android中用于允许部分文本编辑?

sat*_*ine 7 android textview

我想允许用户在我的Android应用中编辑一行文本的一部分.我看到一个名为EasyEditSpan的类,但当我将它粘贴到TextView时没有任何反应.我尝试使TextView可编辑,但它仍然没有任何效果.如果切换到EditText,那么整行文本都是可编辑的,这也是不正确的.这是我的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    TextView testView = (TextView)findViewById(R.id.text_view);
    testView.setText(buildMiddleEditSpannable("Please enter your ", "Name", " here."));
}

public static Spannable buildMiddleEditSpannable(CharSequence beginning, CharSequence middle, CharSequence end) {
    int spanMidStart = beginning.length();
    int spanMidEnd = spanMidStart + middle.length();

    SpannableString span = new SpannableString(new StringBuilder(middle).insert(0, beginning).append(end));
    span.setSpan(new EasyEditSpan(), spanMidStart, spanMidEnd, 0);
    return span;
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 5

在查看引用EasyEditSpan(EasyEditSpan,TextViewTextUtils)的框架代码之后,很明显即使它在其描述中说:

提供编辑部分文本的简便方法.

目前可用的功能仅限于说明的第二部分,如下所示:

TextView使用此范围允许用户一键删除文本夹.文本.只要编辑文本或光标移动,TextView就会删除此范围.

这是一些演示其用法的快速示例代码:

public class EasyEditSpanActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final EditText editText = new EditText(this);
        setContentView(editText);

        showToast("Longclick to set EasyEditSpan for the line on cursor");

        editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
        editText.setSingleLine(false);
        editText.setText("####\n#######\n###\n######\n####".replace("#", "text "));
        editText.setOnLongClickListener(new OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                final Layout layout = editText.getLayout();
                final int line = layout.getLineForOffset(editText.getSelectionStart());
                final int start = layout.getLineStart(line);
                final int end = layout.getLineEnd(line);
                editText.getEditableText().setSpan(new EasyEditSpan(), start, end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                showToast("Edit line to show EasyEdit window");
                return true;
            }
        });
    }

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }

}
Run Code Online (Sandbox Code Playgroud)

所以不幸的是,如果您需要一种方法来允许用户仅编辑应用程序中的一行文本的一部分,那EasyEditSpan似乎没什么帮助.您可能需要使用ClickableSpan可能的自定义对话框来实现一些代码.