完美解决Android 全屏模式下软键盘不遮挡EditText
对于全屏模式下, 默认edittext是不会随着软键盘的弹出而向上移动的, 即使在xml里设置属性
android:windowSoftInputMode="stateVisible|adjustResize" 这个即可, 例如:
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateVisible|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
但是在设置了全屏模式的情况下, 即使设置如上属性, 也不起作用, 运行的结果同样如下:
怎么解决这个问题呢,
我的方法是通过属性动画, 让edittext移动到软键盘的上方, 因为属性动画是真正的移动控件, 这样再使用键盘输入, 输入结果会显示在editext上, 共有一下几步:
1.计算出软键盘的高度
2.判断软键盘是否弹出
3.计算出edittext需要移动的距离
4.如果弹出, 给edittext设置动画移动到软键盘的上方
5.如果软键盘收回, 则给edittext设置动画移动回原来的位置:
第一, 计算软键盘高度:
计算的方式如下:
edit_main.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
private int statusBarHeight;
@Override
public void onGlobalLayout() {
Log.d(TAG, "onGlobalLayout: ");
Rect r = new Rect();
// 使用最外层布局填充,进行测算计算
rl_main.getWindowVisibleDisp