功能一,近日遇到需要给输入的文字换行,并自动换二格的问题,几经周折,终于找到了解决方案
先判断软键盘输入的是enter键。在这里 return true的是为了防止输入法自身遇到enter键换行,这样就会导致换二行出现。而除了enter 返回false,就是为了让其它的软键盘功能正常使用,不然删除等键全会失效!
另外加一个 action_up是为了防止 这里调用2次这个方法。action_down的时候,此方法也会调用 ,在此作一个过滤。
edt_line.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
if ((event.getAction() == KeyEvent.ACTION_UP)) {
Log.w(TAG, "************");
int end = edt_line.getSelectionEnd();
Editable editableText = edt_line.getEditableText();
editableText.insert(end, "\r\n ");
}
return true;
}
return false;
}
});
功能二:自动排版,有了上面的工作,自动排版就比较容易了,把不需要的空格替换掉即可。首先替换掉所有的空格,然后给换行符后面加4个空格。搞定,是不是很简单^_^
String text = edt_line.getText().toString().trim();
Log.d(TAG, "before:\n" + text);
text = text.replaceAll(" ", "");
text = text.replaceAll("\t", "");
text = text.replaceAll("\n", "\n ");
Log.d(TAG, "after:\n" + text);
edt_line.setText(text);
1.获取光标位置,start为插入数据前光标,end为结束编辑后光标位置
int index = editText.getSelectionStart();
int end = editText.getSelectionEnd();
2.在光标处插入字符
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.insert(index, "bbbb");
3.删除光标前字符
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.delete(index-1, index);