进阶1-1

9 篇文章 0 订阅
3 篇文章 0 订阅

1、RecycleView

适用于样式丰富的列表,自定义程度高的

addItemDecoration()自定义分割线,详细理解在另一篇文章内。关于RecycleView 设置间隔ItemDecoration的理解

setItemAnimator()设置动画

布局管理器可以设置列表排列方向,默认垂直排列

适配器是必须需,但是每次都要写一大堆重复的内容真的好麻烦,最可恶的是还要算进重复率里。对于存在多个相似类似的列表应该写一个通用适配器,或者封装一个基础适配器再继承。

贴一个之前写好的抽象类,这样调用的时候代码就减少了许多。

如果recycle是用于分页加载刷新可以通过getItemViewType判断对应位置item的样式,getItemCount根据需求为表头/尾留出item位置,在onCreateViewHolder中根据type加载不同的layout,实现上拉下拉出现的提示性item。

MyViewHolder是学习别人的封装好viewHolder,通过构造函数获取View,并封装好如setText(id,String)等需要使用的方法,这里就不贴完整代码了。使用过程中碰到一个问题就是我定义使用了单击和长点击方法,但是当我长按item时,发现在onLongClick之后onClick也会被调用,这对长点击的使用会造成影响。我搜索到的解决方案就是在重写长点击事件的时候return true,这样单击事件就无法被调用了。

实现类,如果只需要点击事件可以直接使用viewHolder原有的holer.itemView.setOnClickListener(),那代码l就更少了。

不过如果确定本身项目里没有多少用的recycleView且无重复相似的地方我觉得这个就不是很有必要了。

recycle的瀑布流布局在item高度不一致的时候可能存在闪烁、位置变换等问题。近期暂不研究,后续有时间再做。

———————————————————————recycleView更新————————————————————————

现在知道recycleView有个叫粘性头部的,感觉用处很大

2、CardView

卡片式布局主要是能提供立体的效果,如果不需要这类效果没有必要嵌套一层CardView了。

详细属性书里都有,这里只提遇到的需要注意的地方。

android:margin=“10dp”默认情况下只对左右边距有效,下图可以看出item之间上下边距就是0 如下左图,这里需要设置cardUseCompatPadding="true"才能准确的实现理想的效果如下右图,这是为什么目前不了解。cardUseCompatPadding的解释是是否允许使用CompatPadding。

关于设置padding需要注意的是,android:padding=""这类是无效的,有效的是app:contentPadding以及它的上下左右。

                

cardView可以通过app:cardElevation设置阴影范围,其理解和普通的elevation一样。但我没有找到改变阴影颜色或者说阴影深浅的方法。

之前UI嫌弃过阴影样式太生硬一定要改,如果不考虑第三方库的话,我目前能实现的就是自定义背景设置阴影,那么这个方式就不止于cardView了,能设置background的控件都能实现。缺点是写起来真的很费劲。还是去找第三方控件吧,如果有更好更有效的方法请告诉我。 截一小部分代码和效果图。

         

3、Notification

 关于通知公告,8.0开始添加了渠道。提一嘴8.0前后的写法。最后一行的count是notification的TAG,TAG一致新通知会覆盖旧的。

这里遇到的问题主要是当存在多个notification时,通知栏会将通知折叠成一个,点击展开按钮可展开。不同通知项跳转的是不同的页面展开后单击都能跳转至对应页面。但是如果我直接点击该项而非展开按钮,会导致重启我的APP,导致已经登录的用户会被迫退出重新登录。还有就是8.0及其以上系统notification除安装后的第一次能弹出弹框,之后检查允许通知的权限就被关闭了,即使我把优先级提到最高也是一样。这两点有待解决。

4、Toolbar

Toolbar多用于带菜单栏的标题栏,如果需要如下文字居中样式的标题栏的话就不建议toolbar了,因为从下面预览图可以看出toolbar内的textView本身就无法正确居中了,文字更是无法居中。

除此情况之外,toolbar还是比较好用的。自带返回按钮可选,还可以自定义toolbar添加菜单项。

5、Palette

Palette我是没有用过的,简单尝试了一下就是根据bitmap获取其中的颜色,在onGenerated中对获取到的颜色进行操作。对于切换主题一类的应该很适用。

6、权限问题

6.0之后对于敏感权限除了需要在AndroidManifest.xml中静态申请,需要在代码中动态申请。对于权限基本上是用到的时候才调用申请。

这里我学到比较重要的两点。

一是需要申请的权限是按组分类的。一组类一个权限动态申请申请的是整个组的权限,比如读写权限。如下的代码如果我只保留一个permission,删除APP后重新安装(如果在APP已安装的情况下继续覆盖安装,权限选择会保留,也就是允许了读写权限之后再安装权限依旧是允许的),弹出的权限申请框是一致的。

二是权限申请操作的回调。权限被拒绝情况下的使用提示很有用(shouldShowRequestPermissionRationale)。上面的int REQUEST_CODE_CONTACT和回调函数中的requestCode应该是用于对应关系,测试requestCode = 我定义的REQUEST_CODE_CONTACT;

这里的ActivityCompat.shouldShowRequestPermissionRationale在选择拒绝但未禁止询问的时候为true,拒绝且不再询问||允许权限的情况下false。

onRequesrPermissionResult在权限弹出过程中会调用两次,弹框前调用一次,选择是否允许权限后调用一次。如果选择不再弹出弹框后,每次进入申请权限的activity直接调用两次,如果权限允许之后则不再调用。

在大部分情况下,封装好的权限请求框架还是比自己写要方便了多了的。

7、分屏模式的问题

之前也有遇到过分屏导致activity被迫销毁且由于弹窗没有正常关闭而导致的窗体泄漏问题。采用的解决方案是让弹窗随着activity生命周期的结束而关闭。虽然这也是必不可少的一个步骤,不过能禁止多窗口就更好了。

伴随多窗口的开启或者关闭必然导致activity的销毁重建(横竖屏变换也是),不需要的情况下统统关掉关掉。

多窗口模式在7.0才开始有的,那么7.0以下只要解决横竖屏切换导致的问题就好了。

禁用多窗口模式:AndroidManifest.xml中 <application ... android:resizeableActivity="false"></application>

禁止横竖屏切换(强制竖屏):AndroidManifest.xml中 <activity ... android:screenOrientation="portrait"/>

screenOrientation的默认在不同手机上表现不一定一致,关于screenOrientation的值可百度自信了解。

 

然后,第一章就结束啦哈哈哈哈哈哈。昨晚在没有做笔记的情况下过了一遍第一章,今天蹲在电脑前码笔记的时候竟然还发现了好多昨天忽略的细节,果然上笔才是王道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值