防止 EditText 自动获取焦点:在 EditText 的父布局 加入两行:
-
android:focusable="true"
-
android:focusableInTouchMode="true"
在 EditText 中,EditText 第一次点击时, setOnClickListener 不触发原因是需要先获取焦点(未获取焦点时候),再次点击触发setOnClickListener 事件。可以在 onTouchListener 中直接处理逻辑,只需要点击一次。
android:focusable = false ,软键盘也不会弹出,因此有下面一点:
注意,onTouchListener 返回true时,onTouchEvent 不会被调用,也不会获得焦点,软键盘无法弹出。
在原控件不可见 或 点击其他控件 时 原控件 会失去焦点。
关闭软键盘代码:
public static void closeSoftKeyboard(View view){
InputMethodManager inputMethodManager = (InputMethodManager)
view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
软键盘弹出引起不适:
我们可以在AndroidManifest.xml的Activity设置属性
①Android:windowSoftInputMode=”adjustResize”,软键盘弹出时对主窗口布局重新进行布局并调用onSizeChanged方法,同时界面不能设置为全屏模式,否则没有什么效果,可以解决软键盘弹出时屏幕抖动问题;
②android:windowSoftInputMode=”adjustPan”时界面的一部分被软键盘覆盖住且不用调用onSizeChanged方法;
区别:adjustResize强调调整布局大小来给软键盘留出空间,adjustPan强调不调整布局大小来显示软键盘;
windowSoftInputMode其他模式:
① stateUnspecified:软键盘的状态,不管是显示状态,还是隐藏状态,没有被指定,系统将选择一个合适的状态或依赖于主题的设置;
② stateUnchanged:当主界面出现在前面时软键盘被保持住;
③ stateHidden:当用户选择某Activity时软键盘隐藏;
④ stateAlwaysHidden:软键盘总是隐藏,除非点击窗口来获取焦点;
⑤ stateVisible:软键盘可见,当切换至Activity主窗口;
⑥ stateAlwaysVisible:总是可见;
⑦ adjustUnspecified:如果有任何布局视图能够滚动他们的内容,则这个窗口将被调整大小从而使滚动窗口的内容在一个较小的区域中可见,没有就算了;
⑧ adjustResize:Activity调整屏幕大小以便留出软键盘的空间;
⑨ adjustPan:Activity不调整屏幕大小以便留出软键盘的空间,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户总能看到输入内容的部分;