Android进阶之路 - 软键盘顶起解决方案

需求 1:软键盘弹出,同时不顶起整体布局

解决:

  • 1-在清单中找到对应的Activity加入
android:windowSoftInputMode="stateHidden|adjustResize"

或者

android:windowSoftInputMode="adjustPan"
  • 2-在代码初始化的时候加入以下这行代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

需求 2:软键盘弹出,顶起当前的布局,但不需要整体上移!

解决:

  • 清单文件中对应的 Activity 添加以下属性
   android:windowSoftInputMode="adjustPan|stateAlwaysHidden"
  • 应用的布局 最外层嵌套 NestedScrollView,让布局整个作为可滑动的状态(PS:NestedScrollView只允许有一个子View,所以要在子View内部包裹,而不是同级产生多个子View)

windowSoftInputMode 类型介绍:

  • “stateUnspecified”

    未指定软键盘的状态,系统将自动选择一个合适的状态或依赖于主题中的设置,这是默认的设置

  • “stateUnchanged”

    当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

  • “stateHidden”

    用户选择activity时,软键盘总是被隐藏

  • “stateAlwaysHidden”

    当该Activity主窗口获取焦点时,软键盘也总是隐藏的

  • “stateVisible”

    软键盘通常是可见的

  • “stateAlwaysVisible”

    用户选择activity时,软键盘总是显示的状态

  • “adjustUnspecified”

    默认设置,通常由系统自行决定是隐藏还是显示

  • “adjustResize”

    该Activity总是调整屏幕的大小以便留出软键盘的空间

  • “adjustPan”

    当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

一般来说,用的比较多的还是”stateHidden|adjustResize”和”stateHidden|adjustPan”这两对组合。
“adjustResize”在使用时布局会被软键盘顶上去,体验非常不好
“adjustPan”在使用时获取焦点的控件下边的View将会被软键盘覆盖

扩展知识(显示、隐藏):

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

// 获取软键盘的显示状态
boolean isOpen=imm.isActive();

// 如果软键盘已经显示,则隐藏,反之则显示 
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

// 隐藏软键盘
imm.hideSoftInputFromWindow(view, InputMethodManager.HIDE_NOT_ALWAYS);

// 强制显示软键盘
imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);   

// 强制隐藏软键盘
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 

你可能感兴趣的:(#,项目开发知识点归纳)