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
- EditText获取被点击的字符,并选中(解决越界,解决不能获取焦点)
- Android 解决点击EditText获取焦点时输入法占满手机屏幕的办法
- EditText点击获取焦点
- 解决EditText自动获取焦点问题
- 解决android EditText自动获取焦点的问题
- 点击屏幕其它地方,让EditText失去焦点,并获取EditText输入的类容
- 简单使用技巧 隐藏键盘, 判断软键盘是否打开. edittext解决第二次点击获取焦点
- setFocusable不能获取焦点失效解决
- 解决EditText编辑框在Fragment中无法获取焦点
- 解决基于SlidingMenu的fragment切换后edittext无法获取焦点的问题
- EditText默认无法获取焦点,必须点击一次才能获取焦点打开软键盘的解决办法
- 让EditText不能自动获取焦点
- 让EditText不能自动获取焦点
- 让EditText不能自动获取焦点
- 让EditText不能自动获取焦点
- 让EditText不能自动获取焦点
- 让EditText不能自动获取焦点
- 让EditText不能自动获取焦点
- 数组选择排序和冒泡排序
- Python编程_Lesson004_list数据类型
- 函数和包 PL/SQL
- NP问题证明
- HDU 2159 FATE(完全背包)
- EditText获取被点击的字符,并选中(解决越界,解决不能获取焦点)
- IIS部署.NET项目
- Python--CSV文件处理
- revit二次开发-HelloWorld,入门
- Tomcat 服务器对请求中一些特殊的符号需作处理
- c++ Premier 学习笔记(unit2 变量和基本类型
- 1019. 数字黑洞
- 合并两个有序链表,合并以后的链表依旧有序
- 关于JavaSE基础逻辑