经常会遇到需要控制输入法的情况,如输入法显示、隐藏; 输入法弹出后,界面被顶上去或编辑框被遮挡等问题;下面分为几个部分总结输入法属性设置,及输入法控制。

一、windowSoftInputMode设置

activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题

这个属性能影响两件事情:

a. 当有焦点产生时,软键盘是隐藏还是显示

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

【1】 在manifest设置

软键盘显示或隐藏的属性有以下几个选择:

【A】stateUnspecified:软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置

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

【C】stateHidden:当用户选择该Activity时,软键盘被隐藏——也就是,当用户导航到该Activity时,而不是由于离开另一个Activity返回到它。

【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘总是被隐藏的;无论是导航到该activity,或是从其他Activity返回到该Activity

stateHidden 与stateAlwaysHidden的区别: 后者,无论何种情况到达该Activity都隐藏输入法,而前者,只确保首次进入该Activity时隐藏输入法;

【E】stateVisible:软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)

【F】stateAlwaysVisible:当用户选择这个Activity时,软键盘是可见的-- 无论是导航到它,或是由于离开另一个Activity返回到它

这两者的区别于 hidden和alwaysHiden一样;

示例:

HomeFragmentActivity的设置:

android:windowSoftInputMode

=

"stateAlwaysHidden|adjustPan" 无论何时到达该界面该界面都隐藏输入法

FindFriendActivity的设置:

android:windowSoftInputMode

=

"stateVisible|adjustPan", 首次进入该界面时,显示输入法; 如果改为

stateAlwaysVisible,那么从其他界面返回该界面时,输入法也会自动弹出

当前窗口变化模式有以下几个选择:

【G】adjustUnspecified:它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间;即当前窗口的size 会发生变化;

【I】adjustPan:该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分,如果输入法弹出时,焦点不被覆盖,那么窗口不会自动移动。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

【2】代码设置

windowSoftInputMode也可以在代码中设置,效果一样

二、控制输入法隐藏、显示 状态

除了进入Activity时,控制输入法的显示/隐藏状态,在Activity使用过程中,有时也需要手动控制。

【1】 切换输入法的显示/隐藏状态 :

如果输入法在窗口上已经显示,则隐藏,反之则显示

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.

INPUT_METHOD_SERVICE

);

imm.toggleSoftInput(0, InputMethodManager.

HIDE_NOT_ALWAYS

);

该方法优点:无需知道当前窗口是否有焦点,也就无需找到该窗口中能获取焦点的控件了;

该方法缺点:如果事先不确定输入法是显示还是隐藏的状态,那么该方法可能无法达到预期效果; 只有确定当前输入法的状态才能使用该方法;

【2】强制弹出输入法

imm.showSoftInput(

currentfocusedView

, 0);

【3】强制隐藏输入法

imm.hideSoftInputFromWindow(

currentfocusedView

.getWindowToken(),

0

)

方法【2】、【3】 必须找到当前具有焦点的控件。 如果当前Activity失去焦点

如弹出对话框,则该Activity无法控制输入法状态了,即上面的方法不起任何效果

第一个参数

currentfocusedView是当前窗口具有焦点的控件,一般是EditText;

三、监控输入法是否弹出

android没有现成的方法告知上层,输入法的状态是显示的还是隐藏的, 但有时需要根据输入法的状态进行一些操作,如 “弹幕”界面,当输入法弹出时,隐藏弹幕面板,反之显示;

windowSoftInputMod

e属性中,

adjustResize模式,在输入法弹出时,会调整界面大小,可以通过界面大小变化来判断输入法是否弹出

【1】自定义界面布局根View

onSizeChanged

中监听大小变化,高度变小,说明输入法弹出,反之,输入法隐藏;

public

class

CheckSoftInputLayout

extends

FrameLayout{

private

OnResizeListener

onResizeListener

;

public

interface

OnResizeListener{

void

OnResize(

int

w,

int

h,

int

oldw,

int

oldh);

}

public

CheckSoftInputLayout(Context context, AttributeSet attrs) {

this

(context, attrs, 0);

}

public

CheckSoftInputLayout(Context context, AttributeSet attrs,

int

defStyle) {

super

(context, attrs, defStyle);

}

public

void

setOnResizeListener(OnResizeListener _listener) {

this

.

onResizeListener

= _listener;

}

@Override

protected

void

onSizeChanged(

int

w,

int

h,

int

oldw,

int

oldh) {

super

.onSizeChanged(w, h, oldw, oldh);

if

(

onResizeListener

!=

null

) {

onResizeListener

.OnResize(w, h, oldw, oldh);

}

}

}

【2】在listener事件中处理

Activity代码:

rootView

.setOnResizeListener(

new

OnResizeListener() {

@Override

public

void

OnResize(

int

w,

int

h,

int

oldw,

int

oldh) {

if

(h < oldh) {

//输入法弹出

//todo

}

else

{

//输入法关闭

//todo

}

}

});

注意:在manifest.xml中,activity的

windowSoftInputMode必须设置为

adjustResize

android+第三发输入法控制,android输入法属性使用,软键盘隐藏、显示状态控制大揭秘...相关推荐

  1. android 软键盘的显示和隐藏方法

    方法一:在OnCreate()函数中,加上下面的代码 getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE ...

  2. Android 软键盘的显示和隐藏,这样操作就对了

    一.前言 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求.开篇明义,本文会讲讲弹出和收起软键盘的一些细节,最终还会从源码进行分析. 想要操作软键盘,需要使用到 InputMetho ...

  3. android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

    在android中,常常会和输入法的软件键盘交互.在Manifest文件中,系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式. 该属性提供了Activit ...

  4. Android软键盘的显示与隐藏

    本文仅是对原创文章重新进行或多或少的代码测试,权当记录并加深印象 再次感谢开发者社区的分享 一:简述 点击文本框EditText,系统会自动弹出软键盘(其本质是一个Dialog),这必然会引起当前Ac ...

  5. Android软键盘手动显示、隐藏、布局上移和EditText上移

    主要实现:Android软键盘手动显示.隐藏.布局上移和EditText上移 AndroidManifest.xml <?xml version="1.0" encoding ...

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

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

  7. android键盘工具栏,android-如何禁用在软键盘上显示“建议”

    android-如何禁用在软键盘上显示"建议" 当某人使用我的应用程序时(仅在某些Activities上),我想关闭在软/虚拟键盘上显示"建议的单词"的功能. ...

  8. android setinputtype光标,Android屏蔽软键盘并且显示光标的实例详解

    Android屏蔽软键盘并且显示光标的实例详解 如果是android4.0以下,那么 editText.setInputType(InputType.TYPE_NULL); 就够了,android4. ...

  9. [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决?

    [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决? window.addEventListener("resize", function () {if ...

  10. Android手动控制软键盘的开启和关闭,判断软键盘是否显示;

    工具类,拿走就能用: import android.annotation.TargetApi; import android.app.Activity; import android.content. ...

最新文章

  1. 干货丨综述卷积神经网络:从基础技术到研究前景
  2. python语法大全-python语法大全,python语法手册
  3. WCF系列教程之WCF操作协定
  4. HDU-4417 Super Mario
  5. Strut2的属性驱动,模型驱动的理解
  6. 帆软报表和jeecg的进一步整合--ajax给后台传递map类型的参数
  7. ORACLE 小时值必须介于1和12之间 解决方法
  8. 【Caffe安装】Caffe安装(有GPU)--wanglei
  9. CF991D Bishwock
  10. easyui图标使用(查找)
  11. wps word转pdf后出现空白页的删除方式
  12. ensp服务器配置文件,ensp配置web服务器
  13. 主流移动开发平台架构分析
  14. vuecli打包后html文件没有压缩的问题
  15. 用户-渠道的ROI计算及优化方案
  16. 2022茶艺师(中级)考试模拟100题及模拟考试
  17. 计算机网络 - 练习(一百二十七)
  18. UIPickerView 用法
  19. 读书点亮生活-教育成本
  20. 关于JavaScript中的空格。

热门文章

  1. dive into openstack ovn (by quqi99)
  2. oracle rollup 合计,oracle中关于分组合计函数rollup使用
  3. 基金知识汇总和实战经验分享
  4. 东辉创投放心用姓名存钱的利害,存款一切权归吗?
  5. 非隔离开关电源相关知识理解汇总
  6. 交易市场中的测不准原理
  7. 因为热爱,所以坚持;因为坚持,得以突破!
  8. 模拟电子技术(一)半导体二极管和三极管
  9. javascript H5解决手机拍照图片被旋转问题
  10. 图片另存为原来有快捷键!