TOP

Android Weekly Notes Issue #221(一)
2017-10-13 10:30:56 】 浏览:10009
Tags:Android Weekly Notes Issue #221

Android Weekly Issue #221

September 4th, 2016
Android Weekly Issue #221

ARTICLES & TUTORIALS

Android ImageView ScaleType: A Visual Guide

回想一下, 你是不是总是记不住ImageView的不同ScaleType的区别, 每次都要各种尝试来找到自己适合的.
这篇文章的作者也有这样的烦恼, 于是他把各种ScaleType都截了图:
ImageView ScaleType

如果用了CENTER_INSIDE, FIT_CENTER, FIT_START,或者FIT_END, 而实际View的大小比图像的大, 可以使用android:adjustViewBounds属性为true, 就会调整View的大小.

官方文档: ImageView.ScaleType

5 steps to creating frustration-free Android test devices

作者讲了如何统一管理测试机.

1.根据你要支持的API level来安装系统.

理想情况下你应该每一个API都有一个对应的机器, 更进一步可以统计一下你的用户用什么的最多来进行调整.

作者列举了他当前的五个机器, 一般来讲, 你至少需要高中低API版本的, 也需要Samsung的机器来测试一些可能会被定制的地方, (当然作者是在国外了, 国内估计需要测试的定制机型就更多了), 另外还需要一个大屏幕的, 来查看UI的适配情况.

幸运的是除了品牌定制机, 其他都可以用模拟器来补救, 在此推荐一下genymotion, 传说中最快的模拟器.

2. 安装并配置测试所需的应用

为了测试你的app, 你可能需要一系列的工具app, 所以第二步你需要安装它们, 登录及设置等等.
原作者常用的工具app有:

  • 1Password: 管理密码.
  • AZ Screen Recorder: 截屏, 制作gif.
  • Chrome Beta: 因为原作者做WebView相关的工作, 所以需要看这个.
  • Dropbox: 自动上传截图, 从电脑可以方便拿, 也可以用来做一些文件相关的测试.
  • Flesky / Swiftkey / Google Keyboard: 也是作者应用相关, 需要测试各种键盘.
  • Keep: 很好用的笔记应用, 可以存一些小notes, url等, 跨设备同步.
  • Solid Explorer: 文件管理器, 可以在系统中方便地移动文件.

3. 在各处都登录

需要登录的账号都登录.

4. 为了统一体验装个Nova Launcher

为了让每个机器都看起来一样, 原作者装了个launcher应用: Nova Launcher.

确实, 因为每个机器的launcher和组织方式不一样, 所以有时候换个机器就会很难找到你想要的东西.

用了这个Nova Launcher之后, 你可以设置好你的home, dock, drawer, 然后多个机器分享设置, 这样当你拿起另一个机器的时候, 所有的应用都在同样的位置.

5. 设置每个机器的系统设置

最后一件事就是一些系统上的设置, 包括:

  • 所有地点的Wi-Fi;
  • DND/total silence: 关声音;
  • Developer options和USB debugging开关打开;
  • 当插线时仍然保持屏幕唤醒;
  • 亮度设置.

最后作者建议开发者平时生活中可以多玩玩各种Android应用.

Security issues with Android Accessibility

看这篇文章之前, 让我们了解一下Accessibility是什么, 搜了一下Android相关文档:

Accessibility是为了扩展访问和利用应用的形式, 基本出发点是为了辅助老年人或者是有障碍的人, 增加一些听觉或触觉反馈, 也可以用来辅助一些特殊场合下的用户, 比如正在开车或照顾孩子, 或者处于非常嘈杂的环境下的情形.

可以结合Google的TalkBack, 也可以自己开发相关的服务.

好了, 话题收敛回来, 看看作者说的安全问题指的是什么.

作者一开篇以一个印度很流行的应用Voodoo为例指出, 把屏幕上的文字读出来这个功能是有安全漏洞的.

首先Voodoo向用户请求accessibility的权限, 这个权限使得应用可以从屏幕上读取文字, 但是用户会认为所有的敏感字段应该不在这个范围之内, 这就是开发者需要认真对待的了.

最近有一个新的登录设计, 已经被应用开来, 就是用户可以选择显示或者隐藏密码字段.

当我们把输入框的input type设置为密码, 那么它是不会被读取到的, 但是有一些应用为了支持显示密码的功能, 可能会把input type设置为其他类型, 这样就会导致密码暴露, 有accessibility权限的恶意应用就会借此盗用用户的敏感信息.

这样当然是不好的啦, 用户开启权限的时候还认为敏感字段总会受到保护呢, 所以我们开发者应该小心地对待用户的敏感信息, 很简单:

ViewCompat.setImportantForAccessibility(your_view, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);

新的TextInputLayout的API可以实现密码显示的toggle功能, 希望这个问题在TextInputLayout中已经解决了, 但是在用这个View之前, 上面的hotfix也算一种解决办法.

How to fix horizontal scrolling in your Android app

在Android中垂直的滚动很常见, 但是如果在垂直滚动的View里嵌套一个水平滚动的View, 那滑动的体验将会非常不好.

Problem: 垂直滚动和内嵌的水平滚动打架了, 滚动体验不佳.

What's happening inside:

例子里根view是一个RecyclerView加垂直 LinearLayoutManager, 里面的child是一个RecyclerView加水平LinearLayoutManager.

但是当用户做水平滚动的时候, touch事件首先被外面的父View给拦截了.

RecyclerView的代码可知, 在onInterceptTouchEvent()方法里, 在垂直滚动使能的情况下, 只要垂直移动的距离(dy)大于一定程度(Math.abs(dy) > mTouchSlop), 就会被认为是垂直滚动.

所以作者他们的解决方案是继承了RecyclerView, 覆写了这个方法, 把条件改成:

if(canScrollVertically && Math.abs(dy) > mTouchSlop && (canScrollHorizontally || Math.abs(dy) > Math.abs(dx))) {...}  

这是他们的完整代码: BetterRecyclerView

Bonus
还有一个跟fling相关的问题: RecyclerView在fling之后需要挺长的一段时间来稳定(settle)下来, 当child还在这个稳定过程中
Android Weekly Notes Issue #221(一) https://www.cppentry.com/bencandy.php?fid=98&id=162129

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android 创建自己的Camera App 下一篇Android 常见对话框