分享一个可以监听软键盘显示隐藏的布局。
2015-03-25 12:21
225 查看
工作偶然遇到一个问题。就是在scrollview中沉底的位置有一个EditText,这个EditText在获取光标之后,会被软键盘自动覆盖UI显示。
解决办法:在清单文件中找到该类 加入如下声明:
android:windowSoftInputMode="adjustPan"
即可完美解决。
做类似numpicker的时候会遇到问题,简单来想让中间的EditText实现TextChangeListener就可以完成一个范围段的控制。
可是实际还是出了很多问题。
比如一个最尖锐的问题就是假如范围是10-100。这个时候用户想输入40,那么删除了0会立马变成40 同理,多加一位会立马变成100做了这个功能反而成了累赘。所以就得设法监听软键盘的弹出和关闭。
如下自定义布局作为跟布局:
这样的话,只需要将其放入所需的页面的布局,然后通过setOnkbdStateListener方法监听软键盘的隐藏和弹出即可,非常的实用。
解决办法:在清单文件中找到该类 加入如下声明:
android:windowSoftInputMode="adjustPan"
即可完美解决。
做类似numpicker的时候会遇到问题,简单来想让中间的EditText实现TextChangeListener就可以完成一个范围段的控制。
可是实际还是出了很多问题。
比如一个最尖锐的问题就是假如范围是10-100。这个时候用户想输入40,那么删除了0会立马变成40 同理,多加一位会立马变成100做了这个功能反而成了累赘。所以就得设法监听软键盘的弹出和关闭。
如下自定义布局作为跟布局:
package com.minxindai.app.view; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.widget.RelativeLayout; public class KeyboardLayout extends RelativeLayout { private static final String TAG = KeyboardLayout.class.getSimpleName(); public static final byte KEYBOARD_STATE_SHOW = -3; public static final byte KEYBOARD_STATE_HIDE = -2; public static final byte KEYBOARD_STATE_INIT = -1; private boolean mHasInit; private boolean mHasKeybord; private int mHeight; private onKybdsChangeListener mListener; public KeyboardLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public KeyboardLayout(Context context, AttributeSet attrs) { super(context, attrs); } public KeyboardLayout(Context context) { super(context); } /** * set keyboard state listener */ public void setOnkbdStateListener(onKybdsChangeListener listener) { mListener = listener; } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (!mHasInit) { mHasInit = true; mHeight = b; if (mListener != null) { mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT); } } else { mHeight = mHeight < b ? b : mHeight; } if (mHasInit && mHeight > b) { mHasKeybord = true; if (mListener != null) { mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW); } Log.w(TAG, "show keyboard......."); } if (mHasInit && mHasKeybord && mHeight == b) { mHasKeybord = false; if (mListener != null) { mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE); } Log.w(TAG, "hide keyboard......."); } } public interface onKybdsChangeListener { public void onKeyBoardStateChange(int state); } }
这样的话,只需要将其放入所需的页面的布局,然后通过setOnkbdStateListener方法监听软键盘的隐藏和弹出即可,非常的实用。
相关文章推荐
- Android监听软键盘显示与隐藏状态来动态改变布局
- 安卓运行时监听配置更改:sim卡、本地语言、键盘显示或隐藏、字体大小、UI模式、屏幕方向、屏幕布局(另一个屏幕)、可用屏幕大小(横纵向)、无屏幕大小(外接屏幕)。
- 弹出一个密码对话框,可以显示和隐藏密码
- Android 监听软键盘显示隐藏
- 安卓开发:监听软键盘的显示与隐藏,并作出其他操作
- Android监听键盘显示和隐藏
- android 监听键盘显示或者隐藏
- EditText的监听事件与键盘显示隐藏
- Android监听键盘显示和隐藏
- css效果,在一个盒子里,把一部分内容隐藏掉,在鼠标悬停到div时,就会把隐藏的部分向上显示出来。 不用js操作,纯css就可以。
- Android 自定义一个可以展开显示更多的文本布局
- 最简单的监听软键盘显示隐藏
- Android监听键盘显示和隐藏
- Android监听键盘显示和隐藏
- 软键盘显示与隐藏的监听
- 监听iPad键盘显示和隐藏事件
- android中隐藏与显示软键盘及不自动弹出键盘及软键盘将布局顶上去的实现方法
- Android监听键盘的显示和隐藏
- 分享 原创的一个模拟鼠标键盘操作的 设置简单 示例可以模拟向QQ群,以及QQ群内成员发送信息。
- 安卓开发技术:监听软键盘的显示与隐藏