Android 控件之 Editext使用技巧
2015-07-07 14:18
661 查看
隐藏软键盘
当我们点击Edittext时(获得焦点),都会弹出系统默认的软键盘,在有时候会需要做到点击EditText不想显示软键盘,这时候我们就要想方法把软键盘给你从隐藏掉,结合自己的经验参考了别人的答案,总结 有以下几种方式:方法一:
(此方法会自动换行,但是会弹出软键盘)
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
例如:
<activity android:name=".Main" android:label="@string/app_name" android:windowSoftInputMode="adjustUnspecified|stateHidden" android:configChanges="orientation|keyboardHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
方法二:
(此方法在EditText中输入文本时会自动换行,但是会弹出软键盘)
让EditText失去焦点,使用EditText的clearFocus方法
例如:
EditText edit=(EditText)findViewById(R.id.edit); edit.clearFocus();
方法三:
强制隐藏Android输入法窗口 (此方法在EditText中输入文本时会自动换行,但是会弹出软键盘)
例如:
EditText edit=(EditText)findViewById(R.id.edit); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
方法四:
EditText始终不弹出软件键盘 ,但光标也会隐藏
例:
EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);
方法五:
(此方法能够隐藏,同时又保留光标的显示)
3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)来实现。或者设置editText.setKeyListener(null)来实现.
3.0以上版本除了调用隐藏方法:setShowSoftInputOnFocus(false),由于是系统内部方法。无法直接调用所以采用反射的方式来进行调用,如下
Class<EditText> cls = EditText.class;try { Method setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class); setShowSoftInputOnFocus.setAccessible(false); setShowSoftInputOnFocus.invoke(eMobile, false); setShowSoftInputOnFocus.invoke(ePeople, false); } catch (NoSuchMethodException e) { // TODO Auto-generated catch blocke.printStackTrace(); }catch (IllegalArgumentException e) { // TODO Auto-generated catch blocke.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch blocke.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch blocke.printStackTrace(); }
上面反射的方法是从TextView的源码中找到的。因为EditText是继承它的,看网上据说有的sdk里面是”setSoftInputShownOnFocus”,反正具体是跟自己的sdk相对应就可以了
Editext光标的所在定位、插入、删除问题:
/**获取EditText光标所在的位置*/ private int getEditTextCursorIndex(EditText mEditText){ return mEditText.getSelectionStart(); }
/**向EditText指定光标位置插入字符串*/ private void insertText(EditText mEditText, String mText){ mEditText.getText().insert(getEditTextCursorIndex(mEditText), mText); }
/**向EditText指定光标位置删除字符串*/ private void deleteText(EditText mEditText){ if(!StringUtils.isEmpty(mEditText.getText().toString())){ mEditText.getText().delete(getEditTextCursorIndex(mEditText)-1, getEditTextCursorIndex(mEditText)); } }
未完,待续….
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories