EditText获取被点击的字符,并选中(解决越界,解决不能获取焦点)

来源:互联网 发布:淘宝代运营团队 编辑:程序博客网 时间:2024/05/17 22:47
//触摸监听edit01.setOnTouchListener(new View.OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {        //如果未输入,不监听        if (edit01.getText().length() == 0) {            return false;        }int px;//触摸的x轴位置        switch (event.getAction()) { case MotionEvent.ACTION_UP:px = (int) event.getX();                int index = edit01.getOffsetForPosition(px, 0) - 1;                edit01.setSelection(index, index + 1);//打开键盘        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);        // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);        imm.showSoftInput(edit01,InputMethodManager.SHOW_FORCED);        }        return true;    }});

补充:
1:居中或者居右,触摸到第一个字符前,
//触摸监听edit01.setOnTouchListener(new View.OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {        //如果未输入,不监听        if (edit01.getText().length() == 0) {            return false;        }int px;//触摸的x轴位置        switch (event.getAction()) { case MotionEvent.ACTION_UP:          px = (int) event.getX();                int index = edit01.getOffsetForPosition(px, 0); //防止越界index = index==0?1:(index>edit01.getText().length?edit01.getText().length:index);        edit01.setSelection(index-1, index);//打开键盘            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);            // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);            imm.showSoftInput(edit01,InputMethodManager.SHOW_FORCED);        }        return true;    }});
2:触摸获取焦距失灵
editPlate.requestFocusFromTouch();
requestFocus() 方法在三种情况下获取焦点不能生效。
1)对应的View不支持Focus;
2) 对应的View支持Focus,但是不支持在Touch模式下的Focus;
3) 对应的View其祖先View 设置了FOCUS_BLOCK_DESCENDANTS 标志, 阻止其子View获取焦点。

3:选中字符灵敏性升级
在使用过程中发现,在EditText中,点击1的位置会选择字符‘b’,点击2的位置会选择c;
推测可能是由于 edit01.getOffsetForPosition(px, 0);在判断自附的时候做了类似四舍五入的事情,完整修改如下
edit01.setOnTouchListener(new View.OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {        //如果未输入,不监听        if (edit01.getText().length() == 0) {            return false;        }int px;//触摸的x轴位置        switch (event.getAction()) { case MotionEvent.ACTION_UP: px = (int) event.getX()+ (int) editPlate.getTextSize() / 2; //点击位置加上字符大小的一半int index = edit01.getOffsetForPosition(px, 0); //防止越界index = index==0?1:(index>edit01.getText().length?edit01.getText().length:index);        edit01.setSelection(index-1, index);//打开键盘            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);            // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);            imm.showSoftInput(edit01,InputMethodManager.SHOW_FORCED);        }        return true;    }});


可能不会再更新了
阅读全文
0 0
原创粉丝点击