android软键盘挡住输入框问题解决方法

摘要:
publicstaticfinaintSOFT_INPUT_STATE_UNSPECIFIED=0;不要修改软输入法区域的状态。publicstaticfinaintSOFT_INPUT_STATE_HIDDEN=2;当窗口处于焦点时隐藏输入法区域。publicstaticfinaintSOFT_INPUT_STATE_ALWAYS_VISIBLE=5;应主动调整窗口以适应软输入窗口。publicstaticfinaintSOFT_INPUT_MASK_ADJUST=0xf0;未指定状态。系统将尝试根据窗口内容选择输入法样式。publicstaticfinaintSOFT_INPUT_ADJUST_未指定=0x00;显示输入法时,允许窗口重新计算大小,以便输入法不会覆盖内容。

教你在EditText中关闭软键盘

1、EditText有焦点(focusable为true)阻止输入法弹出
Java代码 editText=(EditText)findViewById(R.id.txtBody);

editText.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

editText.setInputType(InputType.TYPE_NULL); // 关闭软键盘

return false;

}

});


2、当EidtText无焦点(focusable=false)时阻止输入法弹出
Java代码 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);


1.调用显示系统默认的输入法

方法一、
Java代码 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

imm.showSoftInput(m_receiverView(接受软键盘输入的视图(View)),InputMethodManager.SHOW_FORCED(提供当前操作的标记,SHOW_FORCED表示强制显示));

方法二、
Java代码 InputMethodManager m=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); (这个方法可以实现输入法在窗口上切换显示,如果输入法在窗口上已经显示,则隐藏,如果隐藏,则显示输入法到窗口上)

2.调用隐藏系统默认的输入法
Java代码 ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); (WidgetSearchActivity是当前的Activity)

3.获取输入法打开的状态
Java代码 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isOpen=imm.isActive();
isOpen若返回true,则表示输入法打开


另外
参数 含义
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
软键盘直接覆盖Activity,通常这是默认值
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
Activity高度会变化,让出软键盘的空间。和WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN 为2选1的值
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE
Activity一打开就直接显示软键盘窗口,如果该窗口需要的话(即有EditText,或有ditable的控件)
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
Activity打开后并不直接显示软键盘窗口,直到用户自己touch文本框。

大家在布局时候,有时候会发现输入框被挡住一部分,能完全显示出来,但是系统自带短信界面
可以完全漂浮在软键盘之上,看了一下短信源码,修改一下输入模式就可以了,源码如下
代码方式: 
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 

也可以简单点:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
  xml方式:
<activity android:name=".Activity.FilterActivity" android:label="@string/app_name"  android:windowSoftInputMode="stateHidden" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"
           />


下面做个详细的介绍:

软输入法模式选项:
public int softInputMode;

以下选项与输入法模式有关:
软输入区域是否可见。
public static final int SOFT_INPUT_MASK_STATE = 0x0f;

未指定状态。
public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0;

不要修改软输入法区域的状态。
public static final int SOFT_INPUT_STATE_UNCHANGED = 1;

隐藏输入法区域(当用户进入窗口时)。
public static final int SOFT_INPUT_STATE_HIDDEN = 2;

当窗口获得焦点时,隐藏输入法区域。
public static final int SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3;

显示输入法区域(当用户进入窗口时)。
public static final int SOFT_INPUT_STATE_VISIBLE = 4;

当窗口获得焦点时,显示输入法区域。
public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5;

窗口应当主动调整,以适应软输入窗口。
public static final int SOFT_INPUT_MASK_ADJUST = 0xf0;

未指定状态,系统将根据窗口内容尝试选择一个输入法样式。
public static final int SOFT_INPUT_ADJUST_UNSPECIFIED = 0x00;

当输入法显示时,允许窗口重新计算尺寸,使内容不被输入法所覆盖。
不可与SOFT_INPUT_ADJUSP_PAN混合使用;如果两个都没有设置,系统将根据窗口内容自动设置一个选项。
public static final int SOFT_INPUT_ADJUST_RESIZE = 0x10;

输入法显示时平移窗口。它不需要处理尺寸变化,框架能够移动窗口以确保输入焦点可见。
不可与SOFT_INPUT_ADJUST_RESIZE混合使用;如果两个都没有设置,系统将根据窗口内容自动设置一个选项。
public static final int SOFT_INPUT_ADJUST_PAN = 0x20;

当用户转至此窗口时,由系统自动设置,所以你不要设置它。
当窗口显示之后该标志自动清除。
public static final int SOFT_INPUT_IS_FORWARD_NAVIGATION = 0x100;

免责声明:文章转载自《android软键盘挡住输入框问题解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unity3D_UGUI判断鼠标或者手指是否点击在UI上高级着色语言HLSL入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Logstash:处理多个input

我们知道Logstash的架构如下:   它的整个pipleline分为三个部分:    input插件:提取数据。 这可以来自日志文件,TCP或UDP侦听器,若干协议特定插件(如syslog或IRC)之一,甚至是排队系统(如Redis,AQMP或Kafka)。 此阶段使用围绕事件来源的元数据标记传入事件。    filter 插件:插件转换并丰富数据 ...

Android输入法架构学习总结

  此文为本人学习输入法之后所做的一个总结报告。与大家分享。   安卓输入法框架(Input Method Framework)IMF 一.输入法框架简介   自Android平台1.5版本以后,Google开放了 Android平台输入法框架(InputMethod Framework, IMF) , IMF是Android平台的特色设计。它的出现大大推...

音频拼接的简单实现方法(python一种,java两种)

音频拼接,就是5s+5s=10s的这种拼接。 需要修改的地方都是有三处,在代码里标注好了。 一、Python实现: Python3 #!/usr/bin/env python # -*- coding:utf-8 -*- # ok,音频拼接 from pydub import AudioSegment # 先导入这个模块 # 加载需要合并的两个mp3音...

vue中使用ueditor富文本编辑框

1.把下载的Ueditor资源,放入静态资源static中。 修改ueditor.config.js中的window.UEDITOR_HOME_URL配置,如下图: 2.在main.js中引入以下文件: import '../static/UE/ueditor.config.js'import '../static/UE/ueditor.all.min...

小谢第29问:Vue项目打包部署到服务器上,调接口就报js,css 文件404

1、publicPath路径的问题,先看下build之后的包确认下是不是publicPath路径配置的原因,有没有static这个文件夹,以及这个文件夹下边有没有这些404的js和css 2、history模式需要配置nginx支持 3、在dev环境下测试没有问题,但是npm run build后图片的路径找不到,对于图片路径的设置,只可以有以下三种方式...

微信浏览器input常见问题

微信中 input 引起的一些常见问题 一、ios端兼容input光标高度 input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上 当点击输入的时候,光标的高度和父盒子的高度一样。 原因: 通常我们习惯用height属性设置行间的高度和line-height属性设置行间的距离(行高),当点击输入的时候,光标的高度就自动和父盒子的高度一样了。(谷歌...