*******这是开发上个项目时遇到的有点问题,之前写过笔记,现在整理到博客上*********

1.遇到的问题

*用户注册页面,这个问题基本只要写过这个页面都会碰到,注册页面有多个EditText用来录入用户信息,够用情况下直接使用一个线性布局,其他属性不设置时呼出软键盘,系统会自动帮我们将页面内容往上推,使当前获取焦点的输入框刚好在软键盘上面。这个效果没有啥问题,但是!当你输入框很多,屏幕放不下时,把他们全部放入ScrollView,你就会发现底下的输入框获取焦点时并不会滚上来了。这时候你就需要关心软键盘输入模式了。

*项目中直播页面有聊天互动,如果聊天输入框获取焦点时再把内容区域顶出屏幕,那就没法看了,所以也需要调整软键盘输入模式。

2.关于软键盘输入模式的几个值

stateUnspecified-未指定状态:当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。

stateUnchanged-不改变状态:当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。

stateHidden-隐藏状态:当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。

stateAlwaysHidden-总是隐藏状态:当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。

stateVisible-可见状态:当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来出来。

stateAlwaysVisible-总是显示状态:当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。

adjustUnspecified-未指定模式:设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。

adjustResize-调整模式:该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间;这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置,系统会根据窗口中的布局自动选择其中一个。

adjustPan-默认模式:该模式下不会通过调整屏幕大小来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视野范围里面,从而让用户可以看到自己输入的内容。

可以单独设置一个值或是state值和adjust值组合,使用时在 manifest文件对应activity 声明属性 windowSoftInputMode 


3.解决问题

其实软键盘的本质就是一个Dialog,当我们点击输入框时,系统对活动主窗口进行调整,从而为软键盘腾出相应的空间,然后将该Dialog显示在底部。不设置时是由系统帮我们选取,遇到问题时我们就需要针对自己的情况强制指定了。

*第一个问题很好解决,直接设置Activity的 windowSoftInputMode为adjustPan 或者adjustResize 都可以使ScrollView滚动 输入框在软键盘之上,那么问题来了,这两种值设置有什么区别呢?adjustResize-调整模式:该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间,调整屏幕大小的意思就是说软键盘呼出以后,实际页面内容显示的区域只有键盘上面一部分了,就像问题中的,我的ScrollView被挤到了屏幕上半部分,简单说就是当前页面大小变小了,但是还能完整显示页面,与之对应的adjust模式中,页面大小没有被修改,只是被强制滑动,使输入框刚好滑动到了软键盘上方。这时候如果软键盘覆盖区域还有内容,你想要在键盘呼出状态下看到下面的内容是不行的。

*第二个问题,效果可以参考所有直播软件(我们这里分三个部分,1是VideoView,2是ViewPager做互动区域,3是输入框 )。根据上面的特性,页面布局上这三部分肯定是不能放在一个线性布局的,不然怎么调整软键盘都是徒劳。我们在相对布局中将VideoView和ViewPager作为内容区,EditText看做一部分,这时候默情况内容区域还是会被顶上去,adjustPan 模式时和默认一样,只有adjustResize模式下,EditText会被顶起且VideoView不会被移动,达到我们要的效果。那么我踩的坑在哪呢,我就是按照这个思路设置完以后死活不行,视频区域一直被滚动上去,在我回头对比了几个直播App之后发现原因就是这个:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

是的,我设置了全屏,导致软键盘设置模式失效!!!

-------关于全屏模式下adjustResize 失效问题 也已经有了解决方案,搜索 AndroidBug5497Workaround

-------------------------------

第一篇博客,之前一直把东西记成笔记,简单方便,不用组织语言,自己看的懂就行,后来发现还是太天真,有些问题时间久了再看自己写的东西都一脸懵逼,到底还是不能偷懒,重要东西还是要做详细记录啊,以后会坚持写一些东西,以前的笔记,新学的知识什么的,希望自己能坚持下来。

Android软键盘与界面内容的坑相关推荐

  1. android 软件盘弹回去的最好体验,Android 软键盘弹出 日常填坑

    开发输入框的开发者都会遇到一个问题,那就是在登录界面时,当你点击输入框时,下边的按钮有时会被输入框挡住,这个不利于用户的体验,所以很多人希望软键盘弹出时,也能把按钮挤上去.这样的交互更人性化,做得合理 ...

  2. (转)Android软键盘弹出,界面整体上移

    原地址:http://blog.csdn.net/u011622479/article/details/51161717 在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,an ...

  3. Android 软键盘弹出时布局内指定内容上移实现及问题解决

    Android 软键盘弹出时布局内指定内容上移实现及问题解决 参考文章: (1)Android 软键盘弹出时布局内指定内容上移实现及问题解决 (2)https://www.cnblogs.com/as ...

  4. android 获取键盘回车键事件,设置软键盘回车键显示内容,点击空白处隐藏软键盘

    首先设置EditText的回车属性 drawable文件 @drawable/editcolor <?xml version="1.0" encoding="utf ...

  5. android 软件盘未弹出如何获取高度,Android 软键盘的那些坑,一招搞定!

    3 软键盘高度获取 对于上面的问题1,既然想要EditText单独顶上去,那么就需要知道当前键盘弹出的高度,再设置EditText坐标即可. 问题的关键转变为如何获取键盘的高度. Activity窗口 ...

  6. Android 软键盘相关问题

    1. windowSoftInputMode属性的使用 Android使用windowSoftInputMode来控制Activity 的主窗口与包含屏幕软键盘的窗口的交互方式. 该属性的设置影响两个 ...

  7. android自定义键盘遮挡,Android软键盘遮挡的四种完美解决方案

    一.问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时 ...

  8. android软键盘上添加一个按钮

    android软键盘上添加一个按钮: 第一种 我们在根布局的最底部添加一个按钮,利用布局中的ScrollView在软键盘弹出的时候 将底部的按钮挤压到软键盘上边,先看效果图: 看代码: <?xm ...

  9. Android软键盘的全面解析,让你不再怕控件被遮盖

    本文转载自:https://blog.csdn.net/l540675759/article/details/74528641 背景 1.Android软键盘这块从我入职到现在,是一个一直纠缠我的问题 ...

  10. 5种方法完美解决android软键盘挡住输入框方法详解

    版权声明:本文为CSDN博主「潇潇凤儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/smileiam/ ...

最新文章

  1. 验证曲线( validation curve)是什么?如何绘制验证曲线( validation curve)?验证曲线( validation curve)详解及实践
  2. elasticsearch(es)分布式全文检索引擎 简介
  3. mysql数据库的快捷键
  4. c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制
  5. 用自定义注解做点什么——自定义注解有什么用
  6. 如何用python批量下载数据_Python实现批量下载文件
  7. SqlServer中获取字符串中的数字部分
  8. 关于ibatis中sqlMap配置文件中使用到,的处理
  9. 科研绘图软件GraphPad Prism教程(一)
  10. 51单片机步进电机c语言程序,51单片机的步进电机c语言驱动程序
  11. html svg在线画板,很棒的SVG图形(多边形)在线生成器
  12. sqlite可视化工具sqliteman的问题
  13. 射线检测C语言,Unity - Raycast 射线检测
  14. linux grep -rn如何只过滤第二层的某个文件夹
  15. Github新手之路(全过程)(站在前辈的肩膀上的总结)
  16. WPF中资源字典引用出错
  17. 常见计算机软件故障有哪些,电脑常见问题有哪些,电脑硬件/软件常见问题及处理方法...
  18. BZOJ 3876 AHOI2014 支线剧情 费用流
  19. but GITEE.COM does not provide shell access
  20. 卫星通信2卫星的定位

热门文章

  1. hdoj 5510 Bazinga
  2. 01[自制油猴插件]去掉烦人的外链提醒
  3. 免费数字证书申请(https)
  4. 计算机被格式化怎么找回资料,文件被格式化 硬盘格式化删除的文件怎么找回...
  5. 一个华为人在华为工作十年的感悟 --徐家骏
  6. [算法学习no5]kmp
  7. 安卓TV开发(四) 实现主流智能TV视频播放器UI
  8. “神棍节”背后的故事
  9. 两路VL53L0X激光测距传感器的使用
  10. 腾达路由器连接移动路由器,做WIFI信号延申