所有程序开发遇到的问题都离不开查阅文档,首先将安卓中文完整版文档免费共享给大家
如需下载点击此下载链接:http://download.csdn.net/detail/kzg_ip/9576142
1.控件焦点问题
一些通知在开发过程中,会发现EditText这个控件如果处理不当会出现自动获取焦点的情况,也就是当你打开你的应用是,界面会自动跳出软件盘,那么经过本人多次调试,最有效的方法就是在EditText的父容器中加上下面两句代码便可以去除焦点。其他控件去除焦点也可用此方法。
方法一
将EditText的父级控设置成:
Android:focusable=”true”
android:focusableInTouchMode=”true”
方法二
在AndroidManifest.xml中的application中添加如下第一行代码
android:windowSoftInputMode=”adjustPan|stateHidden”

<applicationandroid:windowSoftInputMode="adjustPan|stateHidden"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" >

通过控件焦点导致软键盘弹出,我又对开发过程中软键盘处理产生了兴趣,通过搜索大量资料,整理如下:
2.软键盘处理问题
在AndroidManifest.xml的application中有一条windowSoftInputMode属性
该属性用于处理activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【一】当有焦点产生时,软键盘是隐藏还是显示
【二】是否减少活动主窗口大小以便腾出空间放软键盘
它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:

在这设置的值(除”stateUnspecified”和”adjustUnspecified”以外)将覆盖在主题中设置的值

各值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

每个值得具体用法如下:
1.stateUnspecified
中文意思是未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式,比如,当界面上只有文本和按钮的时候,软键盘就不会自动弹出,因为没有输入的必要。那么,当界面上出现了获取了焦点的输入框的时候,软键盘会不会自动的弹出呢?这个还真不一定!比如,在下面的这个界面布局中,软键盘并不会自动弹出。

就是说,默认的,在这种界面情况下,系统并不确定用户是否需要软键盘,因此不会自动弹出。但是,为什么说不一定呢?这是因为,如果我们在这个布局的外面,包裹上一个
ScrollView,软键盘就会自动的弹出来了!
如下,在这种布局文件下,软键盘会自动的弹出
代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ScrollView
        android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayout
            android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><Button
                android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="toOther"android:text="跳转" /><EditText
                android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout></ScrollView></LinearLayout>

这确实是一个很奇怪的判断方式。因此,我们可以得出结论,当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的,但是当有获得焦点的输入框的界面有滚动的需求的时候,会自动弹出软键盘。至于为什么非要强调要获取焦点的输入框,这是因为,如果不是输入框获取焦点,软键盘也是不会自动弹出的,让界面不自动弹出软键盘的其中一个解决方案,就是在xml文件中,设置一个非输入框控件获取焦点,从而阻止键盘弹出。
2.stateUnchanged
中文的意思就是状态不改变的意思,我们应该怎么理解这句话呢?其实很好理解,就是说,当前界面的软键盘状态,取决于上一个界面的软键盘状态。举个例子,假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;如果当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。
3.stateHidden
顾名思义,如果我们设置了这个属性,那么键盘状态一定是隐藏的,不管上个界面什么状态,也不管当前界面有没有输入的需求,反正就是不显示。因此,我们可以设置这个属性,来控制软键盘不自动的弹出。
4.stateAlwaysHidden
这个属性也可以让软键盘隐藏,但是我暂时还不知道和stateHidden属性的区别
5.stateVisible
设置为这个属性,可以将软键盘召唤出来,即使在界面上没有输入框的情况下也可以强制召唤出来。
6.stateAlwaysVisible
这个属性也是可以将键盘召唤出来,但是与stateVisible属性有小小的不同之处。举个例子,当我们设置为stateVisible属性,如果当前的界面键盘是显示的,当我们点击按钮跳转到下个界面的时候,软键盘会因为输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。但是如果我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,但是当我们再次回来的时候,软键盘是会显示出来的。所以,这个Always就解释了这个区别,不管什么情况到达当前界面(正常跳转或者是上一个界面被用户返回),软键盘都是显示状态。
说到这里,我联想到了上面的stateHidden和stateAlwaysHidden,我估计区别也是这样的,就是说,stateAlwaysHidden无论如何都是隐藏的,但是如果在跳转到下个界面的时候,软键盘被召唤出来了,那么当下个界面被用户返回的时候,键盘应该是不会被隐藏的,但是,我还没有找到能够跳转到下个界面,还让当前界面软键盘不消失的方法,所以暂时不能验证。
7.adjustUnspecified
从这个属性开始,就不是设置软键盘的显示与隐藏模式了,而是设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。如果界面里面有可以滚动的控件,比如ScrowView,系统会减小可以滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到所有的内容。如果布局里面没有滚动的控件,那么软键盘可能就会盖住一些内容,我们从下面的图中可以看出差别。
没有滚动控件,软键盘下面的布局都被遮挡住了,若想修改,只能隐藏软键盘,然后选择。而且,重点注意一下上面的布局,当我们选择的输入框偏下的时候,上面的标题栏和布局被软键盘顶上去了。记住这个特征,因为后面有个属性和这个的效果不一样。

布局里面有滑动控件,系统会自动的缩小整个界面的大小,因此,我们可以软键盘上面的小区域中显示所有的输入框。

这就是两中显示模式之间的差别。
8.adjustResize
这个属性表示Activity的主窗口总是会被调整大小,从而保证软键盘显示空间。
我们先看显示效果。
注意观察这个上面的标题栏和按钮,设置为adjustResize属性之后,对于没有滑动控件的布局,虽然还是不能选择所有的输入框,但是,窗口的显示方式发生了变化,默认属性时,整个布局是被顶上去了,但是设置为adjustResize属性,布局的位置并没有发生什么变化,这就是最大的区别。

而对于有滑动控件的布局来说,显示效果和默认是一样的。

9.adjustPan
如果设置为这个属性,那么Activity的屏幕大小并不会调整来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的失业范围里面,从而让用户可以看到自己输入的内容。对于没有滚动控件的布局来说,这个其实就是默认的设置,如果我们选择的位置偏下,上面的标题栏和部分控件会被顶上去。但是对于有滚动控件的布局来说,则不太一样,我们看下面的效果图。
首先,这是软键盘没有弹出的时候,有滚动控件的显示范围,最下面显示的是9.

当我们点击5这个输入框,我们会发现下面的现象。
最上面只能够显示到按钮,标题栏已经不能看到了。

而最下面也只能滑动到8,下面的内容也不能够滑动了。

因此,我们就能够理解这个属性的作用了。
通过以上的实验,我们可以得出结论,如果我们不设置”adjust…”的属性,对于没有滚动控件的布局来说,采用的是adjustPan方式,而对于有滚动控件的布局,则是采用的adjustResize方式。
了解了上面的这些知识之后,我们就可以根据自己的需求设置不同的方式了。而且,关于如何使得界面加载的时候不显示软键盘,我们也有了一个很清楚的认识。

安卓开发中关于软键盘处理的一些问题相关推荐

  1. 【Android】安卓开发实战之软键盘设置

    一.设置软键盘的"完成"按键 要将软键盘的可变按键设置为"完成",只要在EditText布局里加上这句话就可以了. android:imeOptions=&qu ...

  2. ios 开发中 关闭软键盘的方法

    文本框输入后关闭键盘: demoViewController.h 添加 - (IBAction)textFieldDoneEditing:(id)sender; demoViewController. ...

  3. 安卓输入法弹出后css横屏,mui开发安卓端,输入法软键盘导致css横屏样式判断触发...

    mui开发安卓端,输入法软键盘导致css横屏样式判断触发 mui开发安卓端,输入法软键盘导致css横屏样式判断触发 css 横屏媒体查询 @media screen and (orientation: ...

  4. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  5. Android Studio安卓开发中使用json来作为网络数据传输格式

    如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验. 一开始我在android studio中导入那6个包,那6个包找了非常久,因为放 ...

  6. 安卓开发中的USB转串口通讯

    安卓开发中的USB转串口通讯 本文使用GitHub上开源的"hoho.android.usbserial"USB串口库.该库基于"Android USB Host API ...

  7. android 软键盘遮住按钮,Android应用中出现软键盘遮挡住按钮如何解决

    Android应用中出现软键盘遮挡住按钮如何解决 发布时间:2020-11-20 16:25:47 来源:亿速云 阅读:110 作者:Leah Android应用中出现软键盘遮挡住按钮如何解决?相信很 ...

  8. 安卓开发中的重力感应传感器

    2019独角兽企业重金招聘Python工程师标准>>> 安卓开发中拥有多种传感器,google提供了11种传感器供应用层使用:加速度.磁力.方向.陀螺仪.光线.压力(返回当前压强). ...

  9. 安卓开发中ToggleButton按钮的使用

    ToggleButton(开关按钮)是Android系统中比较简单的一个组件,是一个具有选中和未选择状态双状态的按钮,并且需要为不同的状态设置不同的显示文本.下面以一个简单的控制室内设备的开关为例来介 ...

  10. 安卓开发中非常炫的效果集合

    安卓开发中非常炫的效果集合 这几天开发的时候,想做一些好看而且酷炫的特效,于是又开始从网上收集各种特效资源.下面给大家一些我喜欢的把,附代码,喜欢的看源代码,然后加到自己项目去把!! 一个开源项目网站 ...

最新文章

  1. 在 Windows server 2008 下计划任务无法正常执行bat批处理文件
  2. activity属性设置大全
  3. zookeeper安装教程(zookeeper3.4.5为例)
  4. sdio接口_多种接口的谷歌Coral模块,总有一款适合您~
  5. 51个国家,2372名选手,20万奖金池,阿里全球调度算法大赛收官
  6. c语言 温探程序,学习第二天,再探C语言
  7. input type=file 实现上传、预览、删除等功能
  8. 关于压缩工具 7z(7-zip) 的选项 -x(排除文件)的解读
  9. (转)也谈设计模式,实例票据打印 解析 Decorator
  10. 文件和内建函数 open() 、file()
  11. 老司机 iOS 周报 #67 | 2019-05-13
  12. 转一篇关于IIS用户权限的帖子
  13. php mysql bbs_BBS(php mysql)完整版(二)
  14. C语言错题锦集(持续更新)
  15. 使用MSChart控件绘制图表。
  16. GoFrame带你从0-1快速入门
  17. 图像的仿射变换原理、Homography、alpha通道以及python实现
  18. 中科银谷:企查查天眼查的企业工商数据是从哪里来的?
  19. 搜索引擎市场份额2018.3
  20. 网页上怎么查询服务器地址,怎么查看一个网页的服务器地址

热门文章

  1. OpenDDS架构说明
  2. 【Chrome/插件】Chrome 插件 推荐
  3. 端口tagged和untagged详解
  4. 毕业2年鏖战美团、京东、阿里3个大厂,成功拿到2个offer,我的社招Java岗面试经历分享
  5. 国际科学数据服务平台nbsp;-nbsp;csdb
  6. Intel 实习mentor布置问题1
  7. 用小乌龟git解决冲突之后,再提交,出现自己没用动过的文件
  8. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V4.0 Android-Q-TD1】...
  9. unity 自动生成脚本
  10. 工业智能网关BL110应用之六十二: 实现西门子S7-200SMART PLC 接入MQTT Client One云平台