1.不让输入法把布局顶上去
传统的做法:对该Activity设置adjustResize
android:name=".MainActivity"
android:windowSoftInputMode="adjustPan">
...
附:adjustPan与adjustResize区别:
adjustPan:不调整布局的高度,布局整体上移,移出屏幕顶部
adjustResize:动态调整布局高度,以适应由于输入法导致被压缩的屏幕空间
2.发现adjustResize的设置无效,布局还是顶上去
神坑:因为Activity里面设置了把状态栏隐藏起来,导致adjustResize设置无效。
解决方法:去掉以下代码
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
3.监听输入法打开收起
自定义顶层的FrameLayout,覆写其onSizeChange方法,通过布局的高度变化,判断输入法弹出和收起
public class ResizeFrameLayout extends FrameLayout {
private OnResizeListener mListener;
public void setOnResizeListener(OnResizeListener l) {
mListener = l; }
public ResizeFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs); }
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mListener != null) {
mListener.onResize(w, h, oldw, oldh); }
}
public interface OnResizeListener {
void onResize(int w, int h, int oldw, int oldh); }
}
4.横屏下,onSizeChange无效
解决方法:对EditText的添加imeOptions为flagNoExtractUi。使软键盘不全屏显示,只占用一部分屏幕
...
android:imeOptions="actionSend|flagNoExtractUi"/>