Android开发中那些让你相见恨晚的方法、类或接口(2)
Android(Java)开发中,有哪些方法、类或接口很实用,但是你却没能在第一时间知道它?有一天你发现它时,只想说一句:“What the f**k,还有这个!”
Part 4:
-
Activity.isChangingConfigurations ()——如果在 Activity 中 configuration 会经常改变的话,使用这个方法就可以不用手动做保存状态的工作了。
-
SearchRecentSuggestionsProvider——可以创建最近提示效果的 provider,是一个简单快速的方法。
-
ViewTreeObserver——这是一个很棒的工具。可以进入到 VIew 里面,并监控 View 结构的各种状态,通常我都用来做 View 的测量操作(自定义视图中经常用到)。
-
org.gradle.daemon=true——这句话可以帮助减少 Gradle 构建的时间,仅在命令行编译的时候用到,因为 Android Studio 已经这样使用了。
-
DatabaseUtils——一个包含各种数据库操作的使用工具。
-
android:weightSum (LinearLayout)——如果想使用 layout weights,但是却不想填充整个 LinearLayout 的话,就可以用 weightSum 来定义总的 weight 大小。
-
android:duplicateParentState (View)——此方法可以使得子 View 可以复制父 View 的状态。比如如果一个 ViewGroup 是可点击的,那么可以用这个方法在它被点击的时候让它的子 View 都改变状态。
-
android:clipChildren (ViewGroup)——如果此属性设置为不可用,那么 ViewGroup 的子 View 在绘制的时候会超出它的范围,在做动画的时候需要用到。
-
android:fillViewport (ScrollView)——在这片文章中有详细介绍文章链接,可以解决在 ScrollView 中当内容不足的时候填不满屏幕的问题。
-
android:tileMode (BitmapDrawable)——可以指定图片使用重复填充的模式。
-
android:enterFadeDuration/android:exitFadeDuration (Drawables)——此属性在 Drawable 具有多种状态的时候,可以定义它展示前的淡入淡出效果。
-
android:scaleType (ImageView)——定义在 ImageView 中怎么缩放/剪裁图片,一般用的比较多的是“centerCrop”和“centerInside”。
-
Merge——此标签可以在另一个布局文件中包含别的布局文件,而不用再新建一个 ViewGroup,对于自定义 ViewGroup 的时候也需要用到;可以通过载入一个带有标签的布局文件来自动定义它的子部件。
-
AtomicFile——通过使用备份文件进行文件的原子化操作。这个知识点之前我也写过,不过最好还是有出一个官方的版本比较好。
Part 5:
-
ViewDragHelper ——视图拖动是一个比较复杂的问题。这个类可以帮助解决不少问题。如果你需要一个例子,DrawerLayout就是利用它实现扫滑。Flavient Laurent 还写了一些关于这方面的优秀文章。
-
PopupWindow——Android到处都在使用PopupWindow ,甚至你都没有意识到(标题导航条ActionBar,自动补全AutoComplete,编辑框错误提醒Edittext Errors)。这个类是创建浮层内容的主要方法。
-
Actionbar.getThemrContext()——导航栏的主题化是很复杂的(不同于Activity其他部分的主题化)。你可以得到一个上下文(Context),用这个上下文创建的自定义组件可以得到正确的主题。
-
ThumbnailUtils——帮助创建缩略图。通常我都是用现有的图片加载库(比如,Picasso 或者 Volley),不过这个ThumbnaiUtils可以创建视频缩略图。译者注:该API从V8才开始支持。
-
Context.getExternalFilesDir()———— 申请了SD卡写权限后,你可以在SD的任何地方写数据,把你的数据写在设计好的合适位置会更加有礼貌。这样数据可以及时被清理,也会有更好的用户体验。此外,Android 4.0 Kitkat中在这个文件夹下写数据是不需要权限的,每个用户有自己的独立的数据存储路径。译者注:该API从V8才开始支持。
-
SparseArray——Map的高效优化版本。推荐了解姐妹类SparseBooleanArray、SparseIntArray和SparseLongArray。
-
PackageManager.setComponentEnabledSetting()——可以用来启动或者禁用程序清单中的组件。对于关闭不需要的功能组件是非常赞的,比如关掉一个当前不用的广播接收器。
-
SQLiteDatabase.yieldIfContendedSafely()——让你暂时停止一个数据库事务, 这样你可以就不会占用太多的系统资源。
-
Environment.getExternalStoragePublicDirectory()——还是那句话,用户期望在SD卡上得到统一的用户体验。用这个方法可以获得在用户设备上放置指定类型文件(音乐、图片等)的正确目录。
-
View.generateViewId()——每次我都想要推荐动态生成控件的ID。需要注意的是,不要和已经存在的控件ID或者其他已经生成的控件ID重复。
-
ActivityManager.clearApplicationUserData()—— 一键清理你的app产生的用户数据,可能是做用户退出登录功能,有史以来最简单的方式了。
-
Context.createConfigurationContext() ——自定义你的配置环境信息。我通常会遇到这样的问题:强制让一部分显示在某个特定的环境下(倒不是我一直这样瞎整,说来话长,你很难理解)。用这个实现起来可以稍微简单一点。
-
ActivityOptions ——方便的定义两个Activity切换的动画。 使用ActivityOptionsCompat 可以很好解决旧版本的兼容问题。
-
AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()——仅仅因为很好玩,没有其他原因。在整个安卓开源项目中(AOSP the Android ——pen Source Project Android开放源代码项目)中还有其他很有意思的东西(比如
GRAVITY_DEATH_STAR_I)。不过,都不像这个这样,这个确实有用 -
ViewParent.requestDisallowInterceptTouchEvent() ——Android系统触摸事件机制大多时候能够默认处理,不过有时候你需要使用这个方法来剥夺父级控件的控制权。
作者:Rocko
链接:https://www.zhihu.com/question/33636939/answer/57297329
看完本文有收获?请分享给更多人
Android 干货
欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。或搜索微信众号:AndroidNiubility。
公众号:AndroidNiubility