android输入框显示在软键盘上边

有时候在界面需要输入的时候,如果输入框在界面的下方,软键盘弹出的时候会遮挡输入框界面,对用户的体验不是很好。

在网上找的别人的解决方案

首先:

 清单文件里面配置:
android:windowSoftInputMode="adjustPan|stateHidden"
android:windowSoftInputMode="adjustResize|adjustUnspecified|stateHidden"

 

在需要组件上移的Activity 加入以下代码:

复制代码

 View decorView = getWindow().getDecorView();
 View contentView = findViewById(Window.ID_ANDROID_CONTENT);// 此处的控件ID可以使用界面当中的指定的任意控件
  decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, contentView));

private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View contentView) {
    return new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            Rect r = new Rect();
            decorView.getWindowVisibleDisplayFrame(r);

            int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;
            int diff = height - r.bottom;

            if (diff != 0) {
                if (contentView.getPaddingBottom() != diff) {
                    contentView.setPadding(0, 0, 0, diff);
                }
            } else {
                if (contentView.getPaddingBottom() != 0) {
                    contentView.setPadding(0, 0, 0, 0);
                }
            }
        }
    };
}

 

开发做得久了,总免不了会遇到各种坑。 
而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑——来来来,我们慢慢看。 
入门篇 
 
Base

最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText。 
对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activity设置:

android:windowSoftInputMode的值adjustPan或者adjustResize即可,像这样:
<activity
    android:name=".MainActivity"
    android:windowSoftInputMode="adjustPan"  >
    ...
</activity>
一般来说,他们都可以解决问题,当然,adjustPan跟adjustResize的效果略有区别。

adjustPan是把整个界面向上平移,使输入框露出,不会改变界面的布局; 
adjustResize则是重新计算弹出软键盘之后的界面大小,相当于是用更少的界面区域去显示内容,输入框一般自然也就在内了。 
↑↑↑ OK,这只是入门,基本上地球上所有的Android工程师都能搞定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值