在开发中沉侵式效果遇到类似华为手机虚拟按键一系列问题的解决
最近刚做完公司一个项目,碰到几个小问题,自己在这里做点小笔记
项目中需求是要求沉侵式的效果,沉侵式的效果我就不多说了网上都有介绍,方法也有多种,但是可能会影响到其他的问题。这里我只能结合我项目中遇到的实际情况在这里说下。
当沉侵模式下,如果界面里面有类似评论那样的输入框就会造成输入框获得焦点之后,不被弹起被输入法挡住,或者是显示不全的效果。还有的在类似华为手机下面的虚拟按键的出现挡住下面的输入框,让你点都点不到编辑框的问题。
我这里的处理方式并不是单一的解决某一个问题是把三种情况下的问题同时解决。现在看到的图片是已经在沉浸模式下的效果,输入框被挡住了
我这里的沉浸模式的方法也是从网上找的两行代码在acitivity的
setContentView();后面加上
// 透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
就可以达到上面的效果。
这时候就要考虑怎么解决虚拟按键挡住界面的问题。后来经过网上找的代码这里也直接贴上来,在里面稍微改了点东西(把输入框顶起的高度和原文章的不一样,我之类的是没有顶起的时候是看不到下面顶起部分,原文中会看到一小段白色高度)
public class HightBottom {// For more information, see https://code.google.com/p/android/issues/detail?id=5497 // To use this class, simply invoke assistActivity() on an Activity that already has its content view set. // private static boolean isKeyBordVisiable; public static void assistActivity(View content) {new HightBottom(content); }private View mChildOfContent; private int usableHeightPrevious; private ViewGroup.LayoutParams frameLayoutParams; private HightBottom(View content) {mChildOfContent = content; mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {possiblyResizeChildOfContent(); }}); frameLayoutParams = mChildOfContent.getLayoutParams(); }private void possiblyResizeChildOfContent() {int usableHeightNow = computeUsableHeight(); if (usableHeightNow != usableHeightPrevious) {//如果两次高度不一致 // int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight(); // int heightDifference = usableHeightSansKeyboard - usableHeightNow; // if (heightDifference > (usableHeightSansKeyboard / 4)) { // // keyboard probably just became visible // isKeyBordVisiable=true; // } else { // // keyboard probably just became hidden // isKeyBordVisiable=false; // } //将计算的可视高度设置成视图的高度 frameLayoutParams.height = usableHeightNow; mChildOfContent.requestLayout();//请求重新布局 usableHeightPrevious = usableHeightNow; }}private int computeUsableHeight() {//计算视图可视高度 Rect r = new Rect(); mChildOfContent.getWindowVisibleDisplayFrame(r); // 这里是调整顶起的高度,可以直接用r.bottom return (r.bottom ); } }
然后使用
HightBottom.assistActivity(findViewById(android.R.id.content)); 透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
现在看到输入框被顶起。
这里要提一点的是,将输入框顶起的方法网上说再activity的界面父界面里面加上属性android:fitssystemWindows="true",用这种方法的时候对你的沉浸式有会一定的影响,如果你的界面顶部和下面的其他空间颜色一样无所谓,但是如果是个渐变色的图片,就会有问题,实际上状态栏还是占高度的如下图
这样看起来并不能很好的达到沉浸模式,所以根据我自己的项目需求我还是用了第一种方法可能会更全面一点。但是这时候又碰到了另外一个问题,当输入框获得焦点之后可能会出现不被顶起或者顶起来的高度不对如下图。
这里可以看到输入框的下面一部分被挡住了。这是我们只需要在AndroidManifest里面对应的Activity里面添加属性
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
即可
<activity android:name=".MainActivity" android:windowSoftInputMode="stateAlwaysHidden|adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
最后当点击发送之后将输入框缩回
LinearLayout lin_comment = (LinearLayout) findViewById(R.id.lin_comment); et_comment = (EditText) findViewById(R.id.et_comment); lin_comment.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {InputMethodManager im = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(et_comment.getWindowToken(), 0); } });
在开发中沉侵式效果遇到类似华为手机虚拟按键一系列问题的解决相关推荐
- android 沉浸式状态栏导致布局被遮挡,沉浸式状态栏导致华为手机虚拟按钮被遮挡的解决办法...
使用了沉浸式状态栏可以让应用给人浑然天成的感觉,是比较好的用户体验,从android 4.4 版本后才能使用城近视状态栏,具体表现是,4.4上是渐变色,5.0以后是全透明. 效果如下: 效果还是挺好的 ...
- 安卓开发中非常炫的效果集合
安卓开发中非常炫的效果集合 这几天开发的时候,想做一些好看而且酷炫的特效,于是又开始从网上收集各种特效资源.下面给大家一些我喜欢的把,附代码,喜欢的看源代码,然后加到自己项目去把!! 一个开源项目网站 ...
- 华为手机恢复出厂设置出现com.android.phone,如何在华为手机中恢复出厂设置?怎么在华为手机中一键还原?...
如何在华为手机中恢复出厂设置?怎么在华为手机中一键还原? 许多使用华为手机的小伙伴在使用一段时间手机过后,手机会变得有些卡顿,我们可以将手机恢复出厂设置来缓解手机卡顿的现象,今天,小编就教大家在华为手 ...
- Android开发中的水波纹效果实现
编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/73200900 前言 android中的水波纹效果是5.0以后 ...
- 混合开发中,H5页面如何监听Android手机返回键
1. 前言 混合开发中,如果当前操作的页面是H5写的.那么这个时候点击Android手机返回键,默认是返回到上一个页面,跟浏览器的回退功能是一样的,都是返回到历史记录中的前一个记录.看着好像没啥问题, ...
- 华为手机虚拟home键,返回键,菜单键开发中遇到的不可隐藏问题,
在开发android应用中,自己的app装在华为手机上后,在显示首页的时候,华为手机的虚拟home键,虚拟返回键,虚拟菜单键隐藏不了.点击隐藏后,这些虚拟图标没了,但是黑色的那一小条还在.求解决???
- 华为新系统鸿蒙效果,19款华为手机内测新系统,流畅度比肩苹果iOS,优先体验鸿蒙OS...
原标题:19款华为手机内测新系统,流畅度比肩苹果iOS,优先体验鸿蒙OS 在前不久举办的HDC 2020大会上,华为新系统EMUI 11终于发布,10款老机型率先开启EMUI 11 Beta版内测,更 ...
- 响应式HTML网页开发,web开发中的响应式网页设计
概念 响应式网页设计最初是由 Ethan Marcotte 提出的一个概念:为什么一定要为每个用户群各自打造一套设计和开发方案?Web设计应该做到根据不同设备环境自动响应及调整.当然响应式Web设计不 ...
- [Flutter] Android沉侵式标题栏顶部叠加层去除
可能你的app是这样: 框起来部分和标题栏颜色并不一致. 调用下面的代码可以变成一样. import 'package:flutter/services.dart'; static SystemUiO ...
最新文章
- AI真人表情包、斗地主AI......DeeCamp学员做了50个好玩又实用的AI项目
- 手把手教你手动创建线程池
- socket开发中INADDR_ANY的含义是什么?
- Spring MVC Rest 学习 一
- 列表和表格---学习笔记02
- javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Service层
- 顺序程序设计03 - 零基础入门学习C语言09
- 【c++】字符串的冒泡排序【存疑,待查】
- Calico 的默认连通性 - 每天5分钟玩转 Docker 容器技术(69)
- C#联合Halcon 自定义控件鼠标双击响应事件
- java列表mvc分页_Springmvc完成分页的功能
- AI 深度关键短语生成
- malloc,calloc区别
- 十年老前端整理的前端全套视频教程,自学者们的福音
- java并发编程(二十六)——单例模式的双重检查锁模式为什么必须加 volatile?
- 美标Class压力等级与MPa等级换算关系 by阿斯米合金
- max232c语言,串行口通信(STC89C52+MAX232):串行口通信硬件设计详解
- Android中WebP图片文件
- 从阴阳五行,四书五经到国学的理解
- ad18放置标尺(测量)