Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EditText,如何在TextWatcher中控制光标?_Android_Cursor_Android Edittext_Textwatcher - Fatal编程技术网

Android EditText,如何在TextWatcher中控制光标?

Android EditText,如何在TextWatcher中控制光标?,android,cursor,android-edittext,textwatcher,Android,Cursor,Android Edittext,Textwatcher,我在EditText上有一个TextWatcher,在方法afterTextChanged中,我向EditText添加字符,然后将光标移动到EditText的末尾以继续添加文本,但我遇到了问题 像这样: public void afterTextChanged(Editable s) { if(edittext.getText().length()==2){ // append dot to edittext edittext.append(".");

我在EditText上有一个TextWatcher,在方法afterTextChanged中,我向EditText添加字符,然后将光标移动到EditText的末尾以继续添加文本,但我遇到了问题

像这样:

public void afterTextChanged(Editable s) {

    if(edittext.getText().length()==2){

        // append dot to edittext
        edittext.append(".");
        // move cursor at end position in EditText
        edittext.setSelection(edittext.getText().length());
      }
}
在android 4.0v或更高版本中,光标停留在“.”之前,在2.2v中工作正常,但在这两种版本中,我都不能删除字符

有人有同样的问题吗


Grettings

您的代码看起来很好


但是,如果删除一个字符,文本长度再次为==2,代码将自动再次添加一个“.”字符-因此,似乎无法删除字符。

您可以这样做以避免删除问题

public class MainActivity extends Activity {
    int count=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText edittext=(EditText)findViewById(R.id.editText1);

        edittext.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable ed) {
                // TODO Auto-generated method stub

                 if(edittext.getText().length()==2 && count < 3){

                        // append dot to edittext
                        edittext.append(".");
                        // move cursor at end position in EditText
                        edittext.setSelection(edittext.getText().length());
                      }
                 count=edittext.getText().length();
            }
        });
    }
公共类MainActivity扩展活动{
整数计数=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText EditText=(EditText)findViewById(R.id.editText1);
edittext.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、int arg3){
//TODO自动生成的方法存根
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
@凌驾
公共无效后文本更改(可编辑){
//TODO自动生成的方法存根
如果(edittext.getText().length()==2&&count<3){
//在编辑文本中添加点
edittext.追加(“.”);
//在EditText中将光标移动到结束位置
edittext.setSelection(edittext.getText().length());
}
count=edittext.getText().length();
}
});
}

删除已更正,但例如:我想在“111”中添加文本,我添加了“.”编辑文本保持“111”的状态,但光标后退到“.”之前一步。当我添加更多文本时,是添加空格字符。这是一个糟糕的解决方案。如果用户移动光标怎么办?
new TextWatcher() {

    int startChanged,beforeChanged,countChanged;

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    public void onTextChanged(CharSequence s, int start, int before, int count) {

        startChanged = start;
        beforeChanged = before;
        countChanged = count;
    }


    public void afterTextChanged(Editable s) {
            ...your code here....
            myEditText.setSelection(startChanged+countChanged);
            ...your code here...
        }
    }
};