最近在做一个聊天界面 ,为了让界面好看点就把界面设成了沉浸式状态栏,然后发现沉浸式状态栏下点击输入框软键盘会把输入框给遮住,打字的时候根本不知道自己打了什么,用户体验很差。

百度了一下说在AndroidManifest.xml的Activity中添加

android:windowSoftInputMode="stateHidden|adjustPan"

得到的效果是:打开软键盘的时候会把输入框顶到软键盘上面,但是同时我们的标题栏也被顶上去看不见了

但我要的效果是 :我打开软键盘的时候聊天内容往上顶,标题栏不动

在github上面找到了个工具类,并且改了一丢丢代码,实现了自己想要的效果:

引用的时候直接在oncreate调用:

SoftHideKeyBoardUtil.assistActivity(this);
/*** @Author: david.lvfujiang* @Date: 2019/10/10* @Describe:*/
public class SoftHideKeyBoardUtil {public static void assistActivity(Activity activity) {new SoftHideKeyBoardUtil(activity);}private Activity activity;private View mChildOfContent;private int usableHeightPrevious;private FrameLayout.LayoutParams frameLayoutParams;private int contentHeight;//获取setContentView本来view的高度private boolean isfirst = true;//只用获取一次private int statusBarHeight;//状态栏高度private SoftHideKeyBoardUtil(Activity activity) {this.activity = activity;//1、找到Activity的最外层布局控件,它其实是一个DecorView,它所用的控件就是FrameLayoutFrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);//2、获取到setContentView放进去的ViewmChildOfContent = content.getChildAt(0);//3、给Activity的xml布局设置View树监听,当布局有变化,如键盘弹出或收起时,都会回调此监听mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {//4、软键盘弹起会使GlobalLayout发生变化public void onGlobalLayout() {if (isfirst) {contentHeight = mChildOfContent.getHeight();//兼容华为等机型isfirst = false;}//5、当前布局发生变化时,对Activity的xml布局进行重绘possiblyResizeChildOfContent();}});//6、获取到Activity的xml布局的放置参数frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();}// 获取界面可用高度,如果软键盘弹起后,Activity的xml布局可用高度需要减去键盘高度private void possiblyResizeChildOfContent() {//1、获取当前界面可用高度,键盘弹起后,当前界面可用布局会减少键盘的高度int usableHeightNow = computeUsableHeight(activity);//2、如果当前可用高度和原始值不一样if (usableHeightNow != usableHeightPrevious) {//3、获取Activity中xml中布局在当前界面显示的高度int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();//4、Activity中xml布局的高度-当前可用高度int heightDifference = usableHeightSansKeyboard - usableHeightNow;//5、高度差大于屏幕1/4时,说明键盘弹出if (heightDifference > (usableHeightSansKeyboard / 4)) {// 6、键盘弹出了,Activity的xml布局高度应当减去键盘高度if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {frameLayoutParams.height = usableHeightSansKeyboard - heightDifference + statusBarHeight;} else {frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;}} else {frameLayoutParams.height = contentHeight;}//7、 重绘Activity的xml布局mChildOfContent.requestLayout();usableHeightPrevious = usableHeightNow;}}private int computeUsableHeight(Activity activity) {Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;Rect r = new Rect();mChildOfContent.getWindowVisibleDisplayFrame(r);//这个判断是为了解决19之后的版本在弹出软键盘时,键盘和推上去的布局(adjustResize)之间有白色区域的问题if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {return (r.bottom - r.top) + statusBarHeight;}return (r.bottom - r.top);}
}

android开发:沉浸式状态栏和全屏模式下输入框和软键盘冲突解决方案相关推荐

  1. Android各种沉浸式状态栏实现

    1.引入 dependencies {compile 'com.gyf.barlibrary:barlibrary:2.3.0' } 2.使用:在BaseActivity 中初始化 public ab ...

  2. Android一键沉浸式状态栏(透明状态栏)

    文章适合新手了解Android一键沉浸式状态栏.文章在编写过程中难免有疏漏和错误,欢迎大佬指出文章的不足之处:更多内容请点进

  3. Android实现沉浸式状态栏(透明状态栏)(QQ和简书样式)

    本文内容大多参考网络上的Android实现沉浸式状态栏教程,由于看了太多类似文章,固在此不再一一列举出处.本文仅为我自己梳理思路和供各位看到本文的朋友参考(百度:Android沉浸式状态栏,第一页内容 ...

  4. android开发沉浸式标题栏_android实现沉浸式状态栏

    前言 在android开发的过程中,经常会涉及到沉浸式状态栏的问题,说白了,就是手机屏幕顶部栏的颜色显示问题,为了实现美感一体的效果,许多app都已经开始了沉浸式状态栏的显示,这里,我也简单介绍一个沉 ...

  5. android开发沉浸式标题栏_Android沉浸式状态栏实现

    应用市场上App越来越多的出现沉浸式状态栏的设计(如下图所示)状态栏和导航栏具有相同的颜色.Android在4.4开始对于该种效果的支持,而在4.4之下,状态栏只是黑框,无法控制.同时在4.4和5.0 ...

  6. android 自定义输入法布局,Android 解决沉浸式状态栏下,输入法弹出,布局不会自动调整的BUG...

    一.前言 在开发中,如果输入框在布局的底部.在弹出输入发时,为了使输入法不遮挡输入框通常有两种做法: 1.将布局压缩(Activity的android:windowSoftInputMode属性设置为 ...

  7. Android的沉浸式状态栏与变色状态栏详解

    此文章装载至http://www.androidchina.net/3520.html点击打开链接 一. 首先我们得了解什么是透明状态栏以及什么是沉浸式状态栏,以及其区别,国内习惯称透明状态栏为沉浸式 ...

  8. Android 笔记 沉浸式状态栏设置及效果说明

    使用android原生的方法设置setSystemUiVisibility,以下是设置相应的属性和展示效果,以及适合场景: ## 沉浸式状态栏 基于anroid5.0开发适配if (Build.VER ...

  9. Android 之 沉浸式状态栏及顶部状态栏背景色设置

    现在很多应用都引用了沉浸式状态栏,如QQ,效果下图: 效果很酷炫,其实设置也很简单.但是,需要注意的是,这种效果只能在API19以及以上版本中才能够做到. 方法一: 首先,如果想让界面Activity ...

最新文章

  1. [Mongodb]删除指定字段
  2. 怎样用java写一个简单的文件复制程序
  3. [译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)
  4. 计算机控制技术与自动化的关系,计算机控制技术东南大学自动化学院.ppt
  5. 智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招
  6. mysql 清空表的两种方法
  7. 香蕉派,蜘蛛侠手臂和USO世界
  8. phpstudy_pro MySQL启动失败的原因
  9. 华为P50 Pro最新渲染图曝光:后置造型有点奇怪
  10. php表达式求值,PHP实现基于栈的后缀表达式求值功能
  11. 小程序秒杀活动服务器,一套实用的小程序秒杀活动方案,亲这边建议你收藏哦...
  12. idea导出Oracle表结构和数据
  13. 十年老码农,现场教你写简历!
  14. 计算机桌面壁纸在哪个文件夹,系统桌面背景在哪个文件夹
  15. 2022年湖南省基金从业资格(私募股权投资基金基础知识)练习题及答案
  16. oracle dbms_lob trim,DBMS_LOB
  17. 魅族手机flyme服务器不响应,魅族手机你绝对不知道的小技巧,魅族Flyme系统超实用!...
  18. No MTA installed, discarding output错误排查与处理(Ubuntu16定时任务的使用)
  19. 【转自D8】女神的QQ动了,我大喜,点开后默泪了,狠狠的吸了口烟。。。
  20. C#使用TCP进行聊天通信(详细解析)

热门文章

  1. 非接触式IC卡(M1卡)性能简介
  2. idl linux运行效率,Linux性能监控之CPU篇
  3. NMS系列(NMS,Soft-NMS,Weighted-NMS,IOU-Guided NMS,Softer-NMS,Adaptive NMS,DIOU NMS,Cluster NMS)
  4. 2.6 情态动词must 被动语态
  5. 公司能不能监控到微信聊天?
  6. 专业音频编辑软件-Audition 2022 v22.6 macOS
  7. LPWA通信费仅需传统10% 成推动物联网重要关键
  8. chapter16 性能调优与架构篇-基础理论和工具
  9. Adobe illustrator有没有45度对齐
  10. 基于java的仓库库存管理系统