900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android软键盘挡住输入框问题解决方法

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

时间:2019-12-08 07:47:38

相关推荐

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

教你在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方式:

<activityandroid: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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。