原文地址:http://android.xsoftlab.net/training/keyboard-input/visibility.html

当输入的焦点进入或者离开文本框时,Android会适时的显示或隐藏输入法。系统还会决定UI及文本框如何出现在输入法的上方。比如,当垂直方向上的可用空间非常紧张时,那么文本框可能就会填充输入法上方的整个区域。对于大多数的APP来说,这样的默认行为是它们所需要的。

不过在另一些情况中,你可能需要直接控制输入法的显示方式,以及需要在输入法可见的时候控制UI的排布方式。那么这节课主要就是介绍如何实现这些。

在Activity启动的时候显示输入法

尽管在Activity启动的时候Android将焦点给了第一个文本框,但是它是不会触发输入法弹出的。这样的行为是符合正常的习惯的,因为进入文本框可能不会Activity启动后的首要任务。不管怎么说,如果进入文本框是Activity的首要任务的话(比如登录界面),那么你可能希望默认情况下进入Activity后就会弹出输入法。

为了在Activity启动后可以显示输入法,需要在清单文件中对应的Activity的元素中添加属性android:windowSoftInputMode。如下:

<application ... ><activity
        android:windowSoftInputMode="stateVisible" ... >...</activity>...
</application>

Note:如果用户的设备含有实体按键,那么软键盘是不会弹出的。

按需求弹出输入法

如果在Activity的生命周期内有这么一个方法:你希望确保在该方法调用后输入法是可见的,那么你可以使用InputMethodManager来将它弹出。

举个例子,下面的方法持有了一个View对象,用户会在这个View内部输入点什么,所以调用requestFocus()方法可以将焦点赋给它,然后showSoftInput()就会将输入法打开:

public void showSoftKeyboard(View view) {if (view.requestFocus()) {InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);}
}

Note: 一旦输入法被弹出,那么最好不要使用代码隐藏它。系统会在用户终止文本框中的任务后将它隐藏或者用户通过系统隐藏了它(比如使用了返回按钮)。

指明你的UI应该如何响应输入法的弹出

当输入法出现在屏幕上时,它会减少APP在屏幕上的使用空间。那么系统会决定如何调整UI的部分区域,但是它可能不是最准确的。为了确保APP拥有最佳的用户体验,应该指明系统如何调整UI。

为了声明Activity的首选方式,应当在项目的清单文件中对应的Activity下添加android:windowSoftInputMode属性,并使用其中一个含有”adjust”的值。

举个例子,为了确保系统可将UI调整到可用区域,应当使用”adjustResize”:

<application ... ><activity
        android:windowSoftInputMode="adjustResize" ... >...</activity>...
</application>

除了以上的方法,你还可以使用组合的的方式来声明UI调整规则与输入法的可见性规则:

    <activity
        android:windowSoftInputMode="stateVisible|adjustResize" ... >...</activity>

指明”adjustResize”是很重要的:如果UI中含有一些用户可能需要迅速访问的按键或者需要操作的文本框的话。举个例子,如果你使用相对布局将一个按钮放置到了屏幕的底部,那么使用”adjustResize”调整布局可以使该按钮出现在输入法的顶部,这样在输入完成之后就可以直接点击该按钮。

Android官方开发文档Training系列课程中文版:键盘输入处理之控制输入法的显示方式相关推荐

  1. Android官方开发文档Training系列课程中文版:调用相机之控制相机

    原文地址:http://android.xsoftlab.net/training/camera/cameradirect.html 在这节课,我们会讨论如何使用Android框架API来直接控制相机 ...

  2. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  3. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  4. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  5. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  6. Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试

    原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html 功能性测试包括模 ...

  7. Android官方开发文档Training系列课程中文版:键盘输入处理之指定输入的类型

    原文地址:http://android.xsoftlab.net/training/keyboard-input/index.html 引言 在文本框接收到焦点时,Android系统会在屏幕上显示一个 ...

  8. Android官方开发文档Training系列课程中文版:打印内容之图像打印

    原文地址:http://android.xsoftlab.net/training/printing/index.html 引言 Android用户会很频繁的浏览设备上的内容,但是有部分情况例外,当屏 ...

  9. Android官方开发文档Training系列课程中文版:分享文件之配置文件共享

    原文地址:http://android.xsoftlab.net/training/secure-file-sharing/index.html 导言 APP经常需要给其它的APP提供一个或多个文件. ...

最新文章

  1. XML文件读取数据绑定到DropDownList
  2. Spark 1.0.0版本发布
  3. java程序初始化顺序
  4. 基础知识:什么是ASP.NET Razor页面?
  5. C++复习笔记--继承和派生
  6. php和python的多线程,Python多线程以及线程锁简单理解(代码)
  7. php 并发 100 压测,简单PHP把握站点并发数
  8. php禁止代理ip访问_php如何禁止代理访问
  9. [vue require动态引入组件、变量]
  10. 十三周二次课(6月20日)
  11. Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(一)
  12. 学习使用Django一 安装虚拟环境
  13. OptiSystem器件学习(一)
  14. php生成色斑图,等值线图以及色斑图实现方式综述
  15. 接口implement
  16. 运用spss modeler运用支持向量机_一道向量题一题多解引起的思考
  17. 动态规划_数字的划分
  18. elasticsearch query里面的slop选项
  19. TOJ 1320.Billiard
  20. 程序员写文档的重要性

热门文章

  1. UNIX TCP回射服务器/客户端之使用epoll模型的服务器
  2. 手机充电IC设置电流与实测电流不一致问题剖析
  3. 拆解镍氢电池充电器,简单的电路设计令人震惊!
  4. lnmp基于fastcgi实现nginx_php_mysql的分离_LNMP基于FastCGI实现Nginx,PHP,MySQL的分离
  5. winform执行oracle语句,C#中的Winform应用程序连接远程Oracle数据库的配置文件及SQL语句的写法...
  6. Python3——多线程之threading模块
  7. 嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX
  8. LeetCode 1816. 截断句子
  9. 程序员面试金典 - 面试题 05.01. 插入(位运算)
  10. LeetCode 92. 反转链表 II(双指针)