安卓软键盘弹起时想向上平移布局但布局却被挤压得解决办法

来源:互联网 发布:业务员管理客户软件 编辑:程序博客网 时间:2024/05/16 05:38
自己做项目得时候遇到得问题,在网上找了很多得解决方案,比较多得文章提供得在Manifests中当前得Activity中添加windowSoftInputMode中一个某一种属性来达到平移得效果,可是经过测试后感觉效果都不理想,后来想到了,既然是在软键盘弹起得时候进行得操作,可不可以监听键盘的点击事件来对布局进行更改呢,在网上搜索安卓源码但是没有找到关于键盘得api,还好有大神于是看到了如下得代码;
private RelativeLayout mRootView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); //这是我的根布局 mRootView = (RelativeLayout) findViewById(R.id.rl_root); //获取屏幕高度 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); final int screenHeightscreenHeight = metrics.heightPixels; //因为系统没有直接监听软键盘API,所以就用以下方法 mRootView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //当界面大小变化时,系统就会调用该方法 Rect r = new Rect(); //该对象代表一个矩形(rectangle) mRootView.getWindowVisibleDisplayFrame(r); //将当前界面的尺寸传给Rect矩形 int deltaHeight = screenHeight - r.bottom; //弹起键盘时的变化高度,在该场景下其实就是键盘高度。 if (deltaHeight > 150) { //该值是随便写的,认为界面高度变化超过150px就视为键盘弹起。 mRootView.setBackground(null); } else { mRootView.setBackgroundResource(R.drawable.login_background_img); } } }); }

代码出自此链接文章

这样对键盘的点击监控事件就有了,问题在于最后得if和else判断,在大于150dp得时候键盘弹起来会改变布局,问题是会怎样改变。几经思考无果,我的朋友帮我问了苹果组的做法,顿时豁然开朗,因为苹果得很多方法都是封装好的,本来以为苹果的键盘弹起来就是向上顶布局的,看了之后才发现实际上是将上面得布局藏起来,安卓里藏起来就是隐藏布局了,于是将安卓得布局重新进行了调整,把想要顶上去得部分写上id,然后在if中setVisibility(View.GONE);在else中setVisibility(View.VISIBLE);

阅读全文
1 0
原创粉丝点击