TranslateAnimation动画结束后的位置问题

今天在使用TranslateAnimation位移一个LinearLayout时,发现动画完成后又会自动回到初始的状态,设置了fillAfter也不太管用。

仔细研究了一下,发现这种现象很正常,因为TranslateAnimation只负责实现位移动画效果,并不会真正的改变LinearLayout的位置,所以需要加一个AnimationListener ,在动画结束(onAnimationEnd() )后,通过设置LayoutParam里相关属性来改变LinearLayout位置才行。

具体的Margin的数值,根据实际需要进行调整即可。也可以直接设置控件的起始X,Y坐标即可。

参考链接:Android: 解决动画完成后位置恢复到初始位置的问题

Android系统证书platform.x509.pem,platform.pk8转换为.keystore文件

概述


我们在进行Android开发的时候,如果开发的是系统应用,都需要系统的签名才能正常运行。而系统应用一般是把代码统一放到系统代码库中跟随系统一起编译。而如果我们想用Android Studio单独开发某个应用而使用系统签名的时候,有两种开发的方式,一种是编译完成后,使用SignApk.jar来进行签名,另外一种是把系统的platform.x509.pem platform.pk8 转换成为Android Studio常用的.keystore文件,编译时候自动签名。

Android系统签名证书的目录是“build/target/product/security”。

SignApk.jar签名


命令行中使用SignApk.jar签名的方式如下:

转换为.keystore文件


使用keytool-importkeypair本站下载)进行转换,转换命令如下:

Android Studio中使用证书:

Android Studio中使用SystemProperties

概述


Android的系统属性相当于Windows的注册表,由key和value组成,且都是核心系统的一个基本机制。相对于Windows的注册表,Android的系统属性要简单一些,它没有Windows注册表的树状结构,而只是一个列表,也就是说没有父子关系。value有string,int,long,boolean,但是设置只能通过字符串方式。

读取系统属性,是通过SystemProperties类来实现的。SystemProperties在android.os下,但这个类是隐藏的,上层程序开发无法直接使用。要使用这个类,有两种方法。一个是导入layoutlib.jar,另外一种是通过反射的方式调用。

导入layoutlib.jar


我们只介绍一下如何在Android Studio中导入的方式
在gradle配置文件中,写一个函数,动态获取layoutlib.jar路径,然后加到dependencies中即可,代码如下:

导入之后,直接

就可以正常使用了。
注意:引入的layoutlib.jar并不会编译到APK包里面,因此不需要担心增加最终的APK的大小的情况。

反射调用


对于不想引入layoutlib.jar的情况,可以直接使用下面的反射类来实现调用。

参考链接


Android Studio 中如何引入 layoutlib.jar?

GSON序列化时排除字段的几种方式


使用transient


这个方法最简单,给字段加上 transient 修饰符就可以了,如下所示:

单元测试用例:

使用Modifier指定


这个方法需要用GsonBuilder定制一个GSON实例,如下所示:

单元测试用例:

使用@Expose注解


注意,没有被 @Expose 标注的字段会被排除,如下所示:

单元测试用例:

使用ExclusionStrategy定制排除策略


这种方式最灵活,下面的例子把所有以下划线开头的字段全部都排除掉:

单元测试用例:

参考链接


GSON序列化时排除字段的几种方式

Android 4.4 前端调试

前端开发的同学通常会在Chrome的开发者调试工具中来对CSS和js进行即时调试和查看效果,如下图一样,对比调试的好处谁用谁知道。nuiqye.png!web

但是,当我们调试混合模式下通过Webview来调用页面的App时就不能使用这种方法啦。在 Android4.4下,原来PC上的调试体验可以完整继承下来,在PC打开调试工具,手机屏作为视图承载者能即时地显示出样式调整的变化。

让我们来一起看看怎么使用这种调试方法。打开手机=》设置=》开发者选项,进入到如下界面:FnUvqy.png!web

在这个界面上,我们可以看到“USB调试”和“ADB网络调试”,这两种调试模式在使用之前必须勾选打开。

在使用调试工具之前,我们还要确认以下几点:Chrome升级到最新版本、我本机Chrome的版本是 35.0.1862.2 dev-m ,可以在Chrome浏览器地址栏中输入“chrome://chrome/”查看当前Chrome的版本号;PC上安装ADB工具,在命令行中键入 “adb version”以查看adb版本。

这里我们以调试手Q应用中心线上首页为例

1、打开手机QQ=》动态=》应用宝

2、打开Chrome浏览器,在浏览器地址栏输入:chrome://inspect/#devices ,如下图,选中红框处的复选框AJBJ7n.png!web

3、在对应设备的下方会出现正在显示的页面,如下图所示,点击inspect链接,进入Chrome的调试模式

FFrQF3z.png!web

剽窃链接: Android 4.4 让前端调试也能这么酷

Android下WebView中Java与JavaScript通信

背景介绍


Android下面WebView开发,有时候需要调用底层的一部分接口,而这部分接口只有Android的SDK才提供相关的功能,这个时候就需要进行Java与JavaScript通信。

例子


  1. 生成JavaScript调用Java函数的接口类
  2. 开启 JavaScript支持,并向WebView注册接口
  3. Html中调用接口例子
  4. 销毁的时候,反注册接口,避免内存泄漏
  5. 销毁的时候,WebView从父容器中移除,避免内存泄漏

完整的例子代码如下(包含WebView的XML布局文件,请自行生成):

Kindle Paperwhite查看MAC地址

背景


路由器设置了MAC地址白名单,如果需要联网必须先得到设备的MAC地址,然后添加进入白名单。

操作


1.点击主屏幕上面的"三道杠",在弹出的菜单中选择“设置”
Kindle_Mac

2.设置页面中,继续点击主屏幕上面的"三道杠",在弹出的菜单中选择“设备信息”

KindleSettingPage

Kindle Paperwhite 截屏

操作


打开kindle Paperwhite阅读器,两个手指同时按对角线,左上+右下 或 右上+左下(见下图)

会看到屏幕闪了一下,表示截图就已经完成了.
Kindle_ScreenShot

那么截取的图片保存在什么地方呢?下面我们就来把图片取出来。使用数据线连接电脑和kindle Paperwhite阅读器。在我的电脑中找到新出现的移动设备,也就是kindle Paperwhite阅读器。Kindle_Disk

打开该磁盘,可以看到根目录下面就是刚才截取的图片。

Kindle_Screenshot_Path

参考链接


  1. Kindle Paperwhite 如何截屏?
  2. kindle Paperwhite阅读器如何快速截屏/截图

gradlew常用命令

  • ./gradlew -v 版本号
  • ./gradlew clean 清除工程目录下的build文件夹
  • ./gradlew build 检查依赖并编译打包

这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 assemble, 如

  • ./gradlew assembleDebug 编译并打Debug包
  • ./gradlew assembleRelease 编译并打Release的包

除此之外,assemble还可以和productFlavors结合使用,比如定义了 installRelease ,uninstallRelease 两个productFlavors,则可以如下命令:

  • ./gradlew installRelease Release模式打包并安装
  • ./gradlew uninstallRelease 卸载Release模式包

gradle编译脚本需要重新下载gradle问题

使用gradlew来build项目时,总是需要下载gradle-2.8-all.zip。但是gradle-2.8-all.zip非常大,有60MB左右,而服务器又在国外,因此经常各种下载失败。

从本地安装的方法如下:

  1. 先下载gradle-2.8-all.zip包。
  2. 把下载好的zip包放到{project.dir}\gradle\wrapper目录下(也就是跟gradle-wrapper.properties 同一个目录)修改{project.dir}\gradle\wrapper\gradle-wrapper.properties文件。如下:
  3. 然后就运行gradlew build就行了。
  4. 安装好gradle之后把gradle-wrapper.properties改回来就行了