Android UI开发中所遇到的各种坑
时间:2022-07-28
本文章向大家介绍Android UI开发中所遇到的各种坑,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.软键盘隐藏问题
- 问题描述:Activity按下返回调用finish()方法后,界面已经销毁,但是软键盘依然还留在屏幕上,这让当前正在显示的Activity没有输入框的完全没法看,非常严重的视觉影响。
- 尝试方案:寻找各种方法去隐藏软键盘,网上各种找。思路是在活动退出时,会调用onDestroy方法销毁界面,在这个方法里面想办法隐藏界面即可。找到下面这种方法,但还是不行。还尝试过用基类找到所有edittext然后让它们失去焦点,隐藏软键盘。
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- 解决方案:一开始在onDestroy()里调隐藏软键盘的思路就是错的,因为onDestroy()之前还有两个生命周期方法,像上述隐藏软键盘的方法有个getCurrentFocus(),在onDestroy()之前肯定得不到正确的获取当前焦点的那个控件了。所以在onPasue()方法里隐藏软键盘就有效,在onDestroy()方法里不管用任何方法都是无效的。
- 注意点:用这个隐藏软键盘的方法,最好做为空判断,否则有可能会出现空指针的异常,如当前界面没有控件获取焦点时,则getCurrentFocus()这个方法得到的是一个null.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(getCurrentFocus!=null)
im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- 软键盘占用布局问题,软键盘有时会把一些控件覆盖掉,这时如何把整个界面向上顶起,让任何控件都不会被覆盖呢?有两步,第一在activity里设置一个属性,如下。第二步,布局里加一个scrollview将你要被顶起的视图放进这里,然后当软键盘显示的时候,就会在scrollview里滚动以获得空间进行显示软键盘。
<activity Android:windowSoftInputMode="adjustResize"
2.merge标签注意点
- merge标签只有在根布局是FrameLayout时才有用,因为安卓所有界面的根布局都是FrameLayout,所以可以用merge标签进行融合。
- merge标签使用后,布局里即使有EditText也无法自动获得焦点,只能手动设置焦点, 调用requestFocus()方法。或者是用requestFocus》在XML布局文件里。
- 使用后要注意如果在根布局中,则不能用LayoutInflater来生成一个view,否则会报如下错误,由于我在listview的getview()里用了这个带有merge的布局,所以崩溃了。补充一点,inflater()方法里可以设置attach root为true则可以解析出来,不会出现崩溃。
android.view.InflateException: Binary XML file line
#2: <merge / can be used only with a valid ViewGroup root and attachToRoot=true
Caused by: android.view.InflateException: <merge / can be used only with a valid ViewGroup root and attachToRoot=true
3.LinearLayout注意点
- 线性布局默认是水平的,要善用weight权重这个属性。
- 非常重要的点,如果方向设为水平,则layout_gravity的top与bottom标签是没有效果的。如果方向设为垂直,则left与right是没有效果的,这时如果想放在靠右的地方,则可以使用space标签,将宽度设为0dp,将layoutweight设为1放在控件前边即可。
4. 布局选择
FrameLayout是最简单的一种布局,所有安卓界面的根布局都是FrameLayout,加载速度最快。
LinearLayou布局与RelativeLayout布局的加载速度需要进一步深入的研究才能得出具体结论。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接
- Laravel 5.5 为响应请求提供的可响应接口
- Laravel 5.5 为 Mailables 类型新增 theme 属性
- Laravel 5.5 的 “vendor:publish” 新增 provider 提示
- 3秒钟,用python破解加密PDF|附工具地址
- [译]Laravel 5.0 之云存储驱动
- [译]Laravel 5.0 之自定义错误页面
- 使用Google的Quickdraw创建MNIST样式数据集!
- CentOS 7 开启 BBR 加速
- 开源项目Minio:提供非结构化数据储存服务
- [译]Laravel 5.0 之事件自动生成
- [译]Laravel 5.0 之 Eloquent 属性转换
- [译]Laravel 5.0 之事件及处理程序
- 自相关与偏自相关的简单介绍
- [译]Laravel 5.0 之命令及处理程序
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- XML文件解析实践(DOM解析)
- golang 多协程的同步方法总结
- C++核心准则T.144:不要特化函数模板
- 三千字带你搞懂XXL-JOB任务调度平台
- Python-科学计算-pandas-14-df按行按列进行转换
- Python实现扫码工具
- C++核心准则T.150:用static_assert检查类和概念的匹配性
- 初学者也能快速写Python脚本啦——通用功能代码分享
- C++核心准则CPL.1:C++比C更好
- C++核心准则CPL.2:如果你必须使用C,使用C和C++的共同子集,并且使用C++编译器编译C代码
- C++核心准则SF.1:如果你的项目没有正在遵从的其他习惯,为代码文件使用.cpp后缀,为接口文件使用.h后缀
- 群晖NAS搭建测速网站,支持万兆
- 二叉树:你真的会翻转二叉树么?
- C++核心准则SF.2:.h文件一定不能包含对象定义或者非inline函数定义
- Vue.js 源码⽬录设计