Android开发技巧汇总(5)

本文是我翻译自国外开发者Danlew博客上的系列文章,原文链接:Android Tips Round-Up, Part 5。感谢伯乐在线的选文、校译。本文在伯乐在线首发


这是我发表的Android开发技巧的最后一篇。

这些技巧都是我亲自测试过的。如果后面遇到新的技巧,我会和大家分享,不过不会是每天都有了。祝大家愉快。

ViewDragHelper

ViewDragHelper 视图拖动是一个比较复杂的问题,这个类可以帮助解决不少问题。如果你需要一个例子,DrawerLayout就是利用它实现的扫滑。 Flavient Laurent 还写了一些关于这方面的优秀文章

PopupWindow: Android到处都在使用PopupWindow ,甚至你都没有意识到(标题导航条ActionBar,自动补全AutoComplete,编辑框错误提醒Edittext Errors),这个类是创建浮层内容的主要方法。

ActionBar.getThemedContext()

Actionbar.getThemrContext()) 标题导航栏的主题化是很复杂的(不同于Activity其他部分的主题化)。你可以得到一个上下文(Context),用这个上下文(Context)创建的自定义组件可以有正确的主题。

ThumbnailUtils

ThumbnailUtils【译者注:该API从V8才开始支持】帮助创建缩略图;通常我都是用现有的图片加载库(比如,Picasso 或者 Volley),不过这个ThumbnaiUtils可以创建视频缩略图。

Context.getExternalFilesDir()

Context.getExternalFilesDir())【译者注:该API从V8才开始支持】 申请了SD卡写权限后,你可以在SD的任何地方写数据,把你的数据写在设计好的合适位置会更加有礼貌。这样数据可以及时被清理,也会有更好的用户体验。此外在,Android 4.0 Kitkat 上在这个文件夹下写数据是不需要权限的,每个用户有自己的独立的数据存储路径。

SparseArray

SparseArray:Map的高效优化版本。推荐了解姐妹类SparseBooleanArray,SparseIntArray和SparseLongArray。

PackageManager.setComponentEnabledSetting()

PackageManager.setComponentEnabledSetting())可以用来启动或者禁用程序清单中的组件。 这个对于关闭不需要的功能组件是非常赞的。比如,关掉一个当前不用的广播接收器。

SQLiteDatabase.yieldIfContendedSafely()

SQLiteDatabase.yieldIfContendedSafely())让你暂时停止一个数据库事务, 这样你可以就不会占用太多的系统资源。

Environment.getExternalStoragePublicDirectory()

Environment.getExternalStoragePublicDirectory():还是那句话,用户期望在SD卡上得到统一的用户体验,用这个方法可以获得在用户设备上放置指定类型文件(音乐,图片等)的正确目录。

View.generateViewId()

View.generateViewId())每次我都想要推荐动态生成控件的ID.需要注意的是,不要和已经存在的控件ID或者其他已经生成的控件ID重复。

ActivityManager.clearApplicationUserData()

ActivityManager.clearApplicationUserData()) 一键清理你的app产生的用户数据,可能是做用户退出登录功能,有史以来最简单的方式了。

Context.createConfigurationContext()

Context.createConfigurationContext()) - 自定义你的配置环境信息,我通常会遇到这样的问题:强制让一部分显示在某个特定的环境下(倒不是我一直这样瞎整,说来话长,你很难理解)。用这个可以实现起来稍微简单一点。

ActivityOptions

ActivityOptions - 方便的定义两个Activity切换的动画。 使用ActivityOptionsCompat 可以很好解决旧版本的兼容问题。

AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()

AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()【译者注:该API从V11才开始支持】- 仅仅因为很好玩,没有其他原因。在整个安卓开源项目中(AOSP the Android Open Source Project Android开放源代码项目)中还有其他很有意思的东西(比如 GRAVITY_DEATH_STAR_I),不过,都不像这个这样,这个确实有用。

ViewParent.requestDisallowInterceptTouchEvent()

ViewParent.requestDisallowInterceptTouchEvent() - Android系统触摸事件机制大多时候能够默认处理,不过有时候你需要使用这个方法来剥夺父一级控件的控制权(顺便,如果你想对Android触摸机制了解更多,这个演讲会令你惊叹不已。)

JerrySher wechat
欢迎关注『程序员在读书』
坚持原创技术分享,您的支持将鼓励我继续创作!