android开发:沉浸式状态栏和全屏模式下输入框和软键盘冲突解决方案
最近在做一个聊天界面 ,为了让界面好看点就把界面设成了沉浸式状态栏,然后发现沉浸式状态栏下点击输入框软键盘会把输入框给遮住,打字的时候根本不知道自己打了什么,用户体验很差。
百度了一下说在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开发:沉浸式状态栏和全屏模式下输入框和软键盘冲突解决方案相关推荐
- Android各种沉浸式状态栏实现
1.引入 dependencies {compile 'com.gyf.barlibrary:barlibrary:2.3.0' } 2.使用:在BaseActivity 中初始化 public ab ...
- Android一键沉浸式状态栏(透明状态栏)
文章适合新手了解Android一键沉浸式状态栏.文章在编写过程中难免有疏漏和错误,欢迎大佬指出文章的不足之处:更多内容请点进
- Android实现沉浸式状态栏(透明状态栏)(QQ和简书样式)
本文内容大多参考网络上的Android实现沉浸式状态栏教程,由于看了太多类似文章,固在此不再一一列举出处.本文仅为我自己梳理思路和供各位看到本文的朋友参考(百度:Android沉浸式状态栏,第一页内容 ...
- android开发沉浸式标题栏_android实现沉浸式状态栏
前言 在android开发的过程中,经常会涉及到沉浸式状态栏的问题,说白了,就是手机屏幕顶部栏的颜色显示问题,为了实现美感一体的效果,许多app都已经开始了沉浸式状态栏的显示,这里,我也简单介绍一个沉 ...
- android开发沉浸式标题栏_Android沉浸式状态栏实现
应用市场上App越来越多的出现沉浸式状态栏的设计(如下图所示)状态栏和导航栏具有相同的颜色.Android在4.4开始对于该种效果的支持,而在4.4之下,状态栏只是黑框,无法控制.同时在4.4和5.0 ...
- android 自定义输入法布局,Android 解决沉浸式状态栏下,输入法弹出,布局不会自动调整的BUG...
一.前言 在开发中,如果输入框在布局的底部.在弹出输入发时,为了使输入法不遮挡输入框通常有两种做法: 1.将布局压缩(Activity的android:windowSoftInputMode属性设置为 ...
- Android的沉浸式状态栏与变色状态栏详解
此文章装载至http://www.androidchina.net/3520.html点击打开链接 一. 首先我们得了解什么是透明状态栏以及什么是沉浸式状态栏,以及其区别,国内习惯称透明状态栏为沉浸式 ...
- Android 笔记 沉浸式状态栏设置及效果说明
使用android原生的方法设置setSystemUiVisibility,以下是设置相应的属性和展示效果,以及适合场景: ## 沉浸式状态栏 基于anroid5.0开发适配if (Build.VER ...
- Android 之 沉浸式状态栏及顶部状态栏背景色设置
现在很多应用都引用了沉浸式状态栏,如QQ,效果下图: 效果很酷炫,其实设置也很简单.但是,需要注意的是,这种效果只能在API19以及以上版本中才能够做到. 方法一: 首先,如果想让界面Activity ...
最新文章
- [Mongodb]删除指定字段
- 怎样用java写一个简单的文件复制程序
- [译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)
- 计算机控制技术与自动化的关系,计算机控制技术东南大学自动化学院.ppt
- 智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招
- mysql 清空表的两种方法
- 香蕉派,蜘蛛侠手臂和USO世界
- phpstudy_pro MySQL启动失败的原因
- 华为P50 Pro最新渲染图曝光:后置造型有点奇怪
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
- 小程序秒杀活动服务器,一套实用的小程序秒杀活动方案,亲这边建议你收藏哦...
- idea导出Oracle表结构和数据
- 十年老码农,现场教你写简历!
- 计算机桌面壁纸在哪个文件夹,系统桌面背景在哪个文件夹
- 2022年湖南省基金从业资格(私募股权投资基金基础知识)练习题及答案
- oracle dbms_lob trim,DBMS_LOB
- 魅族手机flyme服务器不响应,魅族手机你绝对不知道的小技巧,魅族Flyme系统超实用!...
- No MTA installed, discarding output错误排查与处理(Ubuntu16定时任务的使用)
- 【转自D8】女神的QQ动了,我大喜,点开后默泪了,狠狠的吸了口烟。。。
- C#使用TCP进行聊天通信(详细解析)
热门文章
- 非接触式IC卡(M1卡)性能简介
- idl linux运行效率,Linux性能监控之CPU篇
- NMS系列(NMS,Soft-NMS,Weighted-NMS,IOU-Guided NMS,Softer-NMS,Adaptive NMS,DIOU NMS,Cluster NMS)
- 2.6 情态动词must 被动语态
- 公司能不能监控到微信聊天?
- 专业音频编辑软件-Audition 2022 v22.6 macOS
- LPWA通信费仅需传统10% 成推动物联网重要关键
- chapter16 性能调优与架构篇-基础理论和工具
- Adobe illustrator有没有45度对齐
- 基于java的仓库库存管理系统