Android Weekly Issue #236

December 18th, 2016
Android Weekly Issue #236

本期内容包括: Google的物联网平台Android Things; FileProvider; Android Studio的Layout Preview使用; Retrofit2使用; Google Sign-In和SmartLock; 把敏感信息放入NDK的解决方式.

设计部分讨论了调色板的灵感来源和几个开发app的时候应该注意的问题.

ARTICLES & TUTORIALS

Getting started with Android Things

Internet of Things (物联网, IoT), 是互联网, 传统电信网等咨询承载体, 让所有能行使独立功能的物品之间实现互联互通的网络.

2016年12月, Google发布了Android Things的开发者预览版, 这是一个专门为IoT设备定制的Android系统.

本篇文章一步一步地教你如何写一个IoT的基本程序, 跑在Raspberry Pi 3 Model B上.

FileProvider

上次我们提到了用DownloadManager下载的东西可以和其他应用分享, 那么如果我们下载的时候没有用DownloadManager呢?

比较常见的情况是我们的应用需要分享内容到其他应用, 或者是文件的类型是我们应用不能自己处理的, 需要找一个支持这种文件类型的其他应用来帮我们打开它.

怎么解决呢? 答案是用FileProvider.

上一期有一篇文章也说过Android 7开始废弃了"file://", 解决方案就是用FileProvider, 所以实现是一样的, 这里就不重复了.

Working with the Layout Preview

Layout Preview向你展示了你的xml将如何在设备上显示. 你可以用它查看布局在不同的配置下如何显示, 比如可以切换横竖屏, 语言等等.

但是它同样也有一些问题:

Issue #1: Preview显示空白
当你的布局是由动态获取的数据来填充的, preview不知道如何填充, 所以你看到的是空白的.

一个好的practice是使用tools命名空间, 指定一些只在preview阶段使用的属性. 这样你就可以指定一些text或src用来预览.

Tip #2: 使得动态内容在Preview可见
如果你的图片是动态资源, 你也可以设置一些最大宽高给parent view, 以防真实的图片比期待的大太多或者是比例不对. 你可以设置tools:layout_height 和tools:layout_width, 还有tools:background在preview中查看view占多大.

本文还推荐了另一个阅读资料: Tools of the trade — Part 1

Tip #3: 修复坏掉的Previews
当你创建一个自定义View的时候, 你需要确保你的View不需要任何外部依赖即可被实例化, 否则Preview可能看不到你的View. 因为Preview不是运行在你的app上的, 它只是运行在IDE的JVM上, 所以View framework之外的东西它是访问不到的.

解决办法是在你的自定义View中做一些特殊处理, 比如把依赖注入放在!isInEditMode()里, 或者用tools:命名空间加一些默认值.

Tip #4: 布局没有被渲染
里面的控件在preview里会被重叠在一起.
解决的办法是使用tools:showIn="layout", 指定具体是显示在哪个布局里. 如果你有多个布局都用到这个, 你可以选一个.

从Android Studio 2.2开始, 你可以使用tools:parentTag来指定parent的类型, 比如tools:parentTag="LinearLayout".

Tip #5: 在Preview中显示隐藏的View
如果你在layout中把view的visibility设置为gone, 那么它是不会在Preview中显示的.

解决办法: 使用tools:visibility="visible".

Android Things Tutorials

Android Things教程.

Get Started With Retrofit 2 HTTP Client

本篇文章以实例讲述如何使用Retrofit, 虽然都是基础内容, 但讲解很详细.

Improving sign-in experience with Google Sign-In and SmartLock

Google提供了两种方式来帮助我们改善用户的登录体验:
Google Sign-In(之前被称为Google+ Sign-In)和SmartLock.

这篇文章举例解释了Google Sign-In和SmartLock的实现.

Google Sign-In的部分比较简单.

SmartLock让我们可以:

  • 让用户保存credentials.
  • 在打开应用的时候请求credentials.
  • 使用存在Chrome上的credentials, 这样我们的网站和app就可以共享credentials.
  • 显示Email提示, 让用户选择email地址.
  • 所有的这些信息都保存在Google的server里, 用户可以保存或删除.

Demo app: charbgr/AuthManager

Storing your secure information in the NDK

这篇文章说敏感信息放在Java代码里不安全, 很容易被人反编译查看出来, 如果放在NDK里面就好一些, 你打开查看的只能是二进制文件, 很难找到.

DESIGN

Introduction to Natural palettes

作者从大自然的图像中得到颜色组合的灵感.
文章中举了几个例子, 如何用相关的照片找到相关主题的调色板.

另推荐一个网站: IN COLOR
BALANCE

Make your Android app look better

让你的App看起来更好的几点建议:

  • 使用同一个图标集的图标.
    (这里推荐了一些图片工具和网站.)
  • 使用Material Design设计的keylines, 使用固定的格子大小.
  • 使用颜色的时候小心一些. (这里推荐了一些调色板网站)
  • 选择字体要明智一些.

LIBRARIES & CODE

Material Components

模块化和可定制的Material Design UI组件. Android, iOS, Web.

Android-oss from Kickstarter

Kickstarter开源了他们的Android应用.

stencil

一个kotlin写的Android库, 实现一种文字路径的动画.

AuthManager

包装了Google Sign-In和SmartLock的Manager.

FolioReader-Android

一个ePub阅读器和解析框架.

BufferTextInputLayout

对Support Library中的TextInputLayout的扩展, 增加了字数统计.

TextLayoutBuilder

使用Builder模式来配置创建一个Layout的属性.

Android Weekly Notes Issue #236的更多相关文章

  1. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  2. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  3. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  6. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  7. Android Weekly Notes Issue #235

    Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...

  8. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...

  9. Android Weekly Notes Issue #231

    Android Weekly Issue #231 November 13th, 2016 Android Weekly Issue #231 Android Weekly阅读笔记, Issue #2 ...

随机推荐

  1. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  2. .NET Core 系列5 :使用 Nuget打包类库

    NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系, ...

  3. win7安装时,避免产生100m系统保留分区的办法

    在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...

  4. 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  5. HDU1671——前缀树的一点感触

    题目http://acm.hdu.edu.cn/showproblem.php?pid=1671 题目本身不难,一棵前缀树OK,但是前两次提交都没有成功. 第一次Memory Limit Exceed ...

  6. Mysql存储引擎及选择方法

    0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...

  7. C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(1)

    一看这个标题,是不去取名有点绕呢?或者是,还有些问题?报告LZ...你的标题取得有问题,是个病句!↖(^ω^)↗!!!先不要急,其实我今天带给大家的就是CoreCLR中的coreclr.其中它是在名字 ...

  8. 从Vue.js窥探前端行业

    近年来前端开发趋势 1.旧浏览器逐渐淘汰,移动端需求增加: 旧浏览器主要指的是IE6-IE8,它是不支持ES5特性的:IE9+.chrome.sarafi.firefox对ES5是完全支持的,移动端大 ...

  9. 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS

    需要做个音频的PPM表,看着一堆的音频术语真是懵了,苦苦在网上扒了几天的文档,终于有了点收获,下面关于声音的分贝做个总结. 分贝 Decibel 分贝(dB)是一个对数单位(logarithmic u ...

  10. IL异常处理

    异常处理在程序中也算是比较重要的一部分了,IL异常处理在C#里面实现会用到一些新的方法 1.BeginExceptionBlock:异常块代码开始,相当于try,但是感觉又不太像 2.EndExcep ...