工作偶然遇到一个问题。就是在scrollview中沉底的位置有一个EditText,这个EditText在获取光标之后,会被软键盘自动覆盖UI显示。
解决办法:在清单文件中找到该类 加入如下声明:
android:windowSoftInputMode="adjustPan"
即可完美解决。
做类似numpicker的时候会遇到问题,简单来想让中间的EditText实现TextChangeListener就可以完成一个范围段的控制。
可是实际还是出了很多问题。
比如一个最尖锐的问题就是假如范围是10-100。这个时候用户想输入40,那么删除了0会立马变成40 同理,多加一位会立马变成100做了这个功能反而成了累赘。所以就得设法监听软键盘的弹出和关闭。
解决办法:在清单文件中找到该类 加入如下声明:
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方法监听软键盘的隐藏和弹出即可,非常的实用。