转载 https://blog.csdn.net/qiutiandepaomo/article/details/84028558

windowSoftInputMode属性主要是用来设置窗口软键盘的交互模式的,这个属性会有两个影响:

1)当有焦点产生时,软键盘是隐藏还是显示。

2)是否减少活动主窗口大小以便腾出空间放软键盘。

这个属性一共有9个值,分别是:stateUnspecified、stateUnchanged、stateHidden、stateAlwaysHidden、stateVisible、stateAlwaysVisible、adjustUnspecified、adjustResize、adjustPan。

1、stateUnspecified

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

1)如果界面上只有文本和按钮的时候,软键盘就不会自动弹出;

2)如果界面上出现了获取了焦点的输入框时,

a、如果界面没有滚动需求,软键盘不会自动弹出;

b、如果界面有滚动需求(如界面中有RecyclerView、ScrollView等可以滑动的控件)时,软键盘会自动弹出。

2、stateUnchanged

状态不改变,当前界面的软键盘状态,取决于上一个界面的软键盘状态,如果从上一个界面跳转到当前界面的时候,软键盘是显示的,那么到了这个界面软键盘也是显示的;如果从上一个界面跳转到当前界面的时候,软键盘是隐藏的,那么到了这个界面软键盘也是隐藏的。

3、stateHidden

状态隐藏,如果我们设置了这个属性,键盘状态就一定是隐藏的,不管上个界面是什么状态,也不管当前界面有没有输入的需求,就是不显示软键盘。

4、stateAlwaysHidden

状态隐藏,如果我们设置了这个属性,键盘状态就一定是隐藏的。和stateHidden效果几乎一样(暂未发现不同之处),比stateHidden隐藏范围更广。

5、stateVisible

状态显示,如果我们设置了这个属性,会把键盘召唤出来,即使在界面上没有输入框的情况下也会强制召唤出来。

6、stateAlwaysVisible

状态显示,这个属性也是将键盘召唤出来,与stateVisible属性小小的区别是:当我们设置了当前页面为stateVisible属性,如果当前的界面键盘是显示的,当我们点击按钮跳转到下个界面的时候,如果在新的页面软键盘隐藏起来,当我们再次回到当前页面的时候,键盘也是隐藏的;但是如果我们设置了当前页面为stateAlwaysVisible,跳转到下个页面,再回到当前页面的时候,软键盘也是会显示出来的。

估计stateHidden和stateAlwaysHidden的区别也类似。

7、adjustUnspecified

未指定状态,这个是软键盘与页面之间显示关系的未指定状态、默认设置状态。这种状态下,系统会根据界面选择不同的模式,如果界面里有可滚动的控件,系统会缩小可以滚动的界面的大小来保证即使软键盘弹出了,也能够看到所有的控件;如果界面里没有可滚动的控件,那么软键盘可能就会盖住一些控件(布局的位置会发生变化,会让获取了焦点的控件显示出来,视情况隐藏可能会隐藏一些控件)。

有滑动控件显示效果:

图一:软键盘隐藏

图二:第一条获取焦点软键盘显示

图三:最后一条获取焦点软键盘显示

无滑动控件显示效果:

图三:软键盘隐藏

图一:第一条获取焦点显示软键盘(第一个EditText获取了焦点,显示第一个EditText)

图二:第二条获取焦点显示软键盘(最后一个EditText获取了焦点,显示最后一个EditText)

8、adjustResize

调整大小状态,这个属性表示Activity的主窗口总是会被调整大小来保证软键盘的显示空间。如果界面中有可滑动控件,显示效果跟adjustUnspecified显示效果一样;如果界面中没有可滑动控件,软键盘可能会盖住一些控件(布局的位置不会发生变化,可能获取了焦点的控件被软键盘盖住)。

无滑动控件显示效果:

图一:软键盘隐藏

图二:第一条获取焦点软键盘显示

图三:最后一条获取焦点软键盘显示

二、三图显示效果一样,三图获取了焦点的EditText没有显示出来。

9、adjustPan

如果设置了这个属性,当软键盘弹出的时候,系统会通过布局的移动,来保证用户要进行输入的输入框在用户的视线范围内。如果界面没有可滑动控件,显示效果和adjustUnspecified效果一样;如果界面有可滑动控件,在软键盘显示的时候,可能会有一些内容显示不出来。

有滑动控件显示效果:

图一:软键盘隐藏

图二:第一条获取焦点-滑动到顶部-软键盘显示

图三:第一条获取焦点-滑动到底部-软键盘显示

图四:最后一条获取焦点-滑动到顶部-软键盘显示

图五:最后一条获取焦点-滑动到底部-软键盘显示

如果获取的焦点在页面上位置偏上,底部的一些内容可能显示不出来,被软键盘遮挡;如果获取的焦点在页面上位置偏下,顶部的一些内容可能显示不出来,被软键盘顶出屏幕。

通过上边的实验,可以得出结论,如果我们不设置"adjust..."属性,对于没有滚动控件的布局来说,采用的是adjustPan方式;对于有滚动控件的布局来说,采用的是adjustResize方式。

---------------------
作者:RXLH929903
来源:CSDN
原文:https://blog.csdn.net/qiutiandepaomo/article/details/84028558
版权声明:本文为博主原创文章,转载请附上博文链接!

Android中Activity的android:windowSoftInputMode属性的更多相关文章

  1. android 中activity 属性说明(转载)

    转自:http://liuwuhen.iteye.com/blog/1759796 activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌 ...

  2. Android中Activity的启动模式

    简介 Android中的活动启动方式分为4种:standard, singleTop, singleTask, singleInstance.可以在AndroidManifest.xml中通过给< ...

  3. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  4. 【android】android中activity的生命周期

    activity生命周期: 实例代码: public class DemoActivity extends Activity { //1.activity第一次被创建的时候,执行 @Override ...

  5. 【Android学习入门】Android中activity的启动模式

    启动模式简单地说就是Activity启动时的策略,在Androidmanifest.xml文件中的标签android:launchMode属性设置,在Android中Activity共有四种启动模式分 ...

  6. Android笔记(六十六) android中的动画——XML文件定义属性动画

    除了直接在java代码中定义动画之外,还可以使用xml文件定义动画,以便重用. 如果想要使用XML来编写动画,首先要在res目录下面新建一个animator文件夹,所有属性动画的XML文件都应该存放在 ...

  7. android 中activity调用远程service中的方法之 aidl的使用

    服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件  (对应本地调用中的接口文件 ...

  8. Android 中Activity生命周期分析(二):从AActivity 到BActivity过程分析

    如果你没有动手去演示的话,你一定要去动手试试看,这个东西非学容易出错,面试中经常出现,好了,上代码: package com.king.review.base; import android.app. ...

  9. Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程

    最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...

随机推荐

  1. SQFREE - Square-free integers

    SQFREE - Square-free integers 求n以内,约数中不包含任意一个平方数的个数,\(n≤10^{14}\). 解 显然为约数计数问题,于是想办法转换为代数问题,不难列出 \[a ...

  2. [转]C#的扩展方法解说

    C#的扩展方法解说 扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型. 为数据类型的添加一个方法的理解:一般来说,int数据类型有 ...

  3. falcon监控指标

    mysql监控指标: 流量状态: Bytes_received/s #平均每秒从所有客户端接收到的字节数,单位KB Bytes_sent/s #平均每秒发送给所有客户端的字节数,单位KB

  4. bootStrap-treeview插件

    简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...

  5. SCOI2015

    这周各种头疼,一直睡觉+发呆,啥子都没干. 就补一下之前的东西. d1t1小凸玩矩阵 传送门 一开始脑子抽写了最小费用最大流,不知道自己怎么想的. 第k大最小,明显的二分,又是二分图,二分第k大值,把 ...

  6. 杂项-SpringBoot-Jasypt:Jasypt(安全框架)

    ylbtech-杂项-SpringBoot-Jasypt:Jasypt(安全框架) 1. 使用jasypt加密Spring Boot应用中的敏感配置返回顶部 1. 本文讲述了在Spring Boot/ ...

  7. CSS中关于多个class样式设置的不同写法

    html中: <div class="containerA"> 这是AAAAAAAAAAAAAAAAAAAAAAA样式 <div class="cont ...

  8. 阿里云服务器(一)——Nodejs环境配置

    最近在阿里云上买了一个轻量应用服务器,想着用来学习一下Nodejs. 64位 配置Nodejs环境: 参考:https://www.runoob.com/nodejs/nodejs-install-s ...

  9. vue 路由跳转记住滚动位置,返回时回到上次滚动位置

    参考:https://blog.csdn.net/qq_40204835/article/details/79853685 方法一: 利用Keep-Alive和监听器 1.首先在路由中引入需要的模块 ...

  10. JS写一个方法,传入一个数组,返回该数组的层深(维度)

    现在我们有一个多维数组,我们想得到该数组的层深,即最大维度 如:var arr = [1, [4,[5,6,[7]]], [2,3]] = 0:返回4:那么我们该怎么做呢? 核心思想:递归,循环遍历 ...