在开发中沉侵式效果遇到类似华为手机虚拟按键一系列问题的解决
来源:互联网 发布:算法竞赛入门经典 白书 编辑:程序博客网 时间:2024/06/02 04:01
最近刚做完公司一个项目,碰到几个小问题,自己在这里做点小笔记
项目中需求是要求沉侵式的效果,沉侵式的效果我就不多说了网上都有介绍,方法也有多种,但是可能会影响到其他的问题。这里我只能结合我项目中遇到的实际情况在这里说下。
当沉侵模式下,如果界面里面有类似评论那样的输入框就会造成输入框获得焦点之后,不被弹起被输入法挡住,或者是显示不全的效果。还有的在类似华为手机下面的虚拟按键的出现挡住下面的输入框,让你点都点不到编辑框的问题。
我这里的处理方式并不是单一的解决某一个问题是把三种情况下的问题同时解决。现在看到的图片是已经在沉浸模式下的效果,输入框被挡住了
我这里的沉浸模式的方法也是从网上找的两行代码在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); }});
- 在开发中沉侵式效果遇到类似华为手机虚拟按键一系列问题的解决
- 解决华为手机隐藏虚拟按键Activity被重启的问题
- 如何解决Android虚拟按键_类似华为的虚拟键
- 安卓类似华为手机适配底部虚拟按键的解决方案
- 安卓类似华为手机适配底部虚拟按键的解决方案
- 解决输入法遮挡布局和华为手机底部虚拟按键遮挡底部界面的方法
- 界面适配华为手机的虚拟按键的解决方案
- 界面适配华为手机的虚拟按键的解决方案
- 界面适配华为手机的虚拟按键的解决方案
- 界面适配华为手机的虚拟按键的解决方案
- 华为手机适配底部虚拟按键的解决方案
- 隐藏与显示华为等有虚拟按键手机的虚拟按键
- 安卓解决华为手机虚拟导航的沉浸效果展示
- 华为手机虚拟home键,返回键,菜单键开发中遇到的不可隐藏问题,
- PopupWindow 在华为手机等某些自带虚拟导航栏底部被挡住的解决
- Java Web开发遇到的一系列问题总结
- SharePoint2013 App开发部署遇到的一系列问题
- 安卓监听输入法键盘打开关闭(兼容虚拟按键栏的手机,比如华为)
- MyBatis学习笔记
- 远程登录工具 —— filezilla(FTP vs. SFTP)、xshell、secureCRT
- 常用sql
- 关于常见的几种缓存算法
- jQuery
- 在开发中沉侵式效果遇到类似华为手机虚拟按键一系列问题的解决
- SpringMVC日期时间格式化方式
- CSND中更改文本格式
- postgresql数据库表格名、字段名有特殊字符
- Sql server 2012与2010版本问题
- 2017年微软暑期实习PM产品经理面经
- 深入了解装箱和拆箱
- android开发之布局(大概)
- xmapp后localhost不能访问