在网上看了很多种顶起EditText的方案,发现都不能达到我的要求,所以自己想了个办法完美解决这个问题。

解决思路如下:先监听到软键盘的显示和隐藏,再通过计算软键盘的高度,来控制事先在EditView布局下的View的高度,最后实现一个顶起效果

第一步:监听软键盘的弹出隐藏和获取高度,这里用了一个辅助监听类


import android.app.Activity;
import android.graphics.Rect;
import android.view.View;/*** 监听软键盘的弹出和隐藏*/
public class SoftKeyBoardListener {private View rootView;//activity的根视图int rootViewVisibleHeight;//纪录根视图的显示高度private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener;public SoftKeyBoardListener(Activity activity) {//获取activity的根视图rootView = activity.getWindow().getDecorView();//监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变rootView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {//获取当前根视图在屏幕上显示的大小Rect r = new Rect();rootView.getWindowVisibleDisplayFrame(r);int visibleHeight = r.height();System.out.println(""+visibleHeight);if (rootViewVisibleHeight == 0) {rootViewVisibleHeight = visibleHeight;return;}//根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变if (rootViewVisibleHeight == visibleHeight) {return;}//根视图显示高度变小超过200,可以看作软键盘显示了if (rootViewVisibleHeight - visibleHeight > 200) {if (onSoftKeyBoardChangeListener != null) {onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight);}rootViewVisibleHeight = visibleHeight;return;}//根视图显示高度变大超过200,可以看作软键盘隐藏了if (visibleHeight - rootViewVisibleHeight > 200) {if (onSoftKeyBoardChangeListener != null) {onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight);}rootViewVisibleHeight = visibleHeight;return;}});}private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener;}public interface OnSoftKeyBoardChangeListener {void keyBoardShow(int height);void keyBoardHide(int height);}public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity);softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);}
}

第二步:在Activity中实现这个接口,并动态给EditText下面的View设置高度

/*** 使键盘能够弹起*/private void initEditHight() {//监听软键盘弹出,并获取软键盘高度SoftKeyBoardListener.setListener(this, new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {@Overridepublic void keyBoardShow(int height) {//软键盘弹起事件  并给View设置高度LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view_keybord.getLayoutParams();layoutParams.height = height;view_keybord.setLayoutParams(layoutParams);}@Overridepublic void keyBoardHide(int height) {//软键盘隐藏事件  并给View设置高度为0LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view_keybord.getLayoutParams();layoutParams.height = 0;view_keybord.setLayoutParams(layoutParams);}});

简单的,我们就完成了整个功能,以下是xml

<LinearLayoutandroid:id="@+id/ll_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:elevation="3dp"android:orientation="horizontal"android:paddingLeft="15dp"android:paddingTop="10dp"android:paddingBottom="10dp"android:paddingRight="15dp"><EditTextandroid:id="@+id/et_im"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/bg_gray_broke"android:gravity="center_vertical"android:hint="聊点什么吧"android:paddingLeft="10dp"android:paddingTop="7dp"android:paddingRight="10dp"android:paddingBottom="7dp"android:singleLine="true"android:textColor="@color/text_blackA6"android:textSize="14sp" /><TextViewandroid:id="@+id/tv_send"android:text="发送"android:textColor="@color/red_fe8977"android:layout_height="match_parent"android:layout_width="wrap_content"android:gravity="center"android:paddingLeft="10dp"android:paddingRight="10dp"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp" /></LinearLayout><Viewandroid:id="@+id/view_keybord"android:layout_width="match_parent"android:layout_height="0dp"></View>

大功告成,如果有受到启发和帮助,点个赞吧

软键盘弹起后顶起EditText的完美解决方案相关推荐

  1. android实现软键盘弹出,editText随键盘上移,背景不动

    android实现软键盘弹出,editText随键盘上移,背景不动 前段时间有个妹子问我如题的需求,我就想,这种东西网上不是很多吗,自己试过才发现,基本都不行,各种设置配置文件的windowSoftI ...

  2. android 代码设置 键盘适应_Android自适应软键盘的Dialog以及监听软键盘弹起

    最近项目中遇到一个需求:新手引导.跟一般的新手引导没有什么太大区别,思路都是搞一个带阴影的遮罩层,然后在上边儿给一些提示性的文字,由于需求中有些特殊的地方,所以我用了一个全屏的dialog(而且,di ...

  3. Explain:解决MUI 软键盘弹起挤压页面问题

    问题:在使用mui和H5+进行移动端开发的时候,经常会遇见需要用户输入的情况 当input获取焦点弹起软键盘的时候,经常会遇见软键盘挤压页面.软键盘遮挡输入框等一系列问题: 原因:造成这种现象的原因是 ...

  4. 软键盘弹起,导致底部被顶上去

    计算出可视界面的高度,当软键盘弹起时让底部元素隐藏掉, 当键盘收起时再让它显示,实在没办法时这种方法也不失为一种方法 1 var h=document.documentElement.clientHe ...

  5. h5 移动端 监听软键盘弹起、收起

    前面一篇博客 h5 安卓 键盘弹起界面适配 修改webview高度提到了在adnroid中如何监听软键盘的弹起与收起,是利用的窗口的高度发生变化 window.onresize事件来做突破点的,但是i ...

  6. h5 ios中软键盘弹起后 fixed定位失效

    position: fixed;在ios手机中会存在一个失效情况: 如果页面有输入框存在,点击输入框软键盘弹起后会发生一个现象: 1.针对当前内容高度小于屏幕高度时: 上下滑动页面时候,发现之前fix ...

  7. vh布局移动端软键盘弹起改变高度问题

    问题描述 在移动端使用vh布局.当页面中包含input.textarea输入框的时候,或者有调起软键盘的操作时,安卓浏览器下,可视窗口的高度改变,导致页面上的vh重新计算,页面被压扁.ios下的浏览器 ...

  8. 手机软键盘弹起导致页面变形的一种解决方案

    最近用 uniapp(一种第三方 app 开发框架) 开发 app,其中一个页面有十几个 input 输入框,在点击 input 输入时,软键盘弹起,导致页面往上顶,底部的按钮也全部弹到页面上面去了, ...

  9. 处理ios软键盘弹起和收起时页面滚动问题

    处理ios软键盘弹起和收起时页面滚动问题 背景: 在开发添加主播功能时,页面底部需要弹出一个抽屉弹窗,点击抽屉上的输入框,会唤起软键盘,由于iOS的软键盘触发方式是将页面滚动,所以导致页面位置偏移 b ...

最新文章

  1. 报错:The method xxxof type xxx must override or implement a supertype method
  2. SAP Spartacus入口Component - StorefrontComponent
  3. 通用唯一标识码UUID的介绍及使用
  4. 过滤器,绑定事件,动画
  5. hibernate id生成策略 mysql_Hibernate中ID生成策略
  6. IT职场人生系列之二十:危险职业(下)
  7. LLVM各种格式转换图
  8. VARCHART XGantt 甘特图如何创建和修改数据记录
  9. 在64位win10中开启64位ie浏览器的方法(IE11)
  10. 编码消耗率CCR,“上帝代码”,反射,简洁代码
  11. 原形网络(Prototypical Networks)基于PyTorch的实现
  12. This is probably not a problem with npm. There is likely additional logging 报错
  13. 面试分享:一年经验初探阿里巴巴前端社招
  14. 计算机基础知识考什么,我想请问下,计算机初级考试考些什么东西?
  15. Java程序性能优化-概述
  16. java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署
  17. python namedtuple
  18. pip install mysqlclient安装
  19. 进入计算机管理界面win7,win7系统打开服务管理界面的操作方法
  20. 关于cocos2d-x项目防止八门神器等修改工具的一种解决办法

热门文章

  1. python-基本的图像操作和处理
  2. 炎炎夏日送清凉 狠抓实干保工期 西安华南城领导慰问工地一线建筑工人
  3. 浅谈零欧姆电阻的作用
  4. 描写火车站场景_作文素材 描写火车站的句子-精品
  5. 精通C++,该如何学? 网友:船长一语中的啊。。。
  6. (PC+WAP)织梦模板财经新闻资讯类网站
  7. 题目 1018: 有规律的数列求和
  8. 解决PVS6.1中VM启动中的vDisk file access perission denied报错问题
  9. 微信每日定时推送消息新闻到群聊或朋友
  10. 【STM32学习】(14)两个74HC595控制四个数码管显示