Android开发中,那些让人相见恨晚的function

2017-12-27  本文已影响30人  似水无痕ls

以下总结的是一些android 开发中,非常实用的一些方法,满满都是干货哦,发车了,滴,滴滴。

布局部分

includeFontPadding="false" textView中字体上下默认是有一定padding的,有时候我们不需要这个padding,可以直接设置此属性即可。

android:backgroundTintMode(Boolean) 可以设置背景填充模式,配合background、backgroundTint使用

android:clipChildren (Boolean) viewgroup是否限制子view的绘制范围

android:clipToPadding (Boolean) 控制view的绘制区域是否在padding里面,在滑动的时候很有用

android:fillViewport (ScrollView) 可以解决在 ScrollView 中当内容不足的时候填不满屏幕的问题

android:descendantFocusability 可以控制viewgroup以及child获取焦点的先后顺序

android:largeHeap="true" 简单粗暴的防止应用OOM,但是这个治标不治本

android:animateLayoutChanges="true" ViewGroup中添加和删除控件会有默认动画

android:enterFadeDuration/android:exitFadeDuration (Drawables) 此属性在 Drawable 具有多种状态的时候,可以定义它展示前的淡入淡出效果。

android:duplicateParentState="true",让子View跟随其Parent的状态,如pressed等。常见的使用场景是某些时候一个按钮很小,我们想要扩大其点击区域的时候通常会再给其包裹一层布局,将点击事件写到Parent上,这时候如果希望被包裹按钮的点击效果对应的Selector继续生效的话,这时候duplicateParentState就派上用场了

Merge 此标签可以在另一个布局文件中包含别的布局文件,而不用再新建一个 ViewGroup,对于自定义 ViewGroup 的时候也需要用到;可以通过载入一个带有标签的布局文件来自动定义它的子部件。


view相关

ValueAnimator.reverse() 顺畅的取消动画效果。

TextView.setError() 在TextView输入错误验证时很有用

Activity.startActivities() 常用于在应用程序中间启动其他的Activity

View.inflate() 一步直接inflate view

ViewCompat.setElevation() 设置view的base elevation, 低版本也能用

ViewConfiguration.getScaledTouchSlop() 使用 ViewConfiguration 中提供的值以保证所有触摸的交互都是统一的。这个方法获取的值表示:用户的手滑动这个距离后,才判定为正在进行滑动.当然这个值也可以自己来决定.但是为了一致性,还是使用标准的值较好
-    GestureDetector 用来监听和相应对应的手势事件,比如点击,长按,慢滑动,快滑动,用起来很简单,比你自己实现要方便许多。

ViewStub它是一个初始化不做任何事情的 View,但是之后可以载入一个布局文件。在慢加载 View 中很适合做占位符。唯一的缺点就是不支持标签,所以如果你不太小心的话,可能会在视图结构中加入不需要的嵌套。

ViewTreeObserver ——这是一个很棒的工具。可以进入到 VIew 里面,并监控 View 结构的各种状态,通常我都用来做 View 的测量操作(自定义视图中经常用到)。
-ViewDragHelper ——视图拖动是一个比较复杂的问题。这个类可以帮助解决不少问题。如果你需要一个例子,DrawerLayout就是利用它实现扫滑。

Path.computeBounds(RectF,Boolean) 计算不规则path的边界,判断一个点是否在path内。

Region.op() 两个区域剪切的模式

StaticLayout 自定义view中渲染文本时有用,比如自动换行- Pair.create() 方便构建类和构造器的方法。


一些有用的工具类

Application.registerActivityLifecycleCallbacks 一个监听Activity生命周期的回调,用了都说好

onTrimMemory 在Activity中重写此方法,会在内存紧张的时候回调(支持多个级别),便于我们主动的进行资源释放,避免OOM。

Context.getCacheDir() 获取缓存数据文件夹的路径,很简单但是知道的人不多,这个路径通常在SD卡上(这里的SD卡指的是广义上的SD卡,包括外部存储和内部存储)Adnroid/data/您的应用程序包名/cache/ 下面.测试的时候,可以去这里面看是否缓存成功.缓存在这里的好处是:不用自己再去手动创建文件夹,不用担心用户把自己创建的文件夹删掉,在应用程序卸载的时候,这里会被清空,使用第三方的清理工具的时候,这里也会被清空

UrlQuerySanitizer 使用此类处理一个Url链接很方便,可以直接拿到url中参数值

LocalBroadcastManager 一个在应用内传播的广播,更效率,安全。类似EventBus

Linkify.addLinks() 在Text上添加链接。很实用。

ActivityManager.clearApplicationUserData() 使用系统ActivityManager直接清除掉用户的数据,退出登录的时候很实用。

IntentService 一个用完会自己关闭的service

PackageManager.checkSignatures ()——如果同时安装了两个 app 的话,可以用这个方法检查。如果不进行签名检查的话,其他人可以轻易通过使用一样的包名来模仿你的 app。
-SparseArray——Map的高效优化版本。推荐了解姐妹类SparseBooleanArray、SparseIntArray和SparseLongArray。

PackageManager.setComponentEnabledSetting()——可以用来启动或者禁用程序清单中的组件。对于关闭不需要的功能组件是非常赞的,比如关掉一个当前不用的广播接收器。
-ThumbnailUtils——帮助创建缩略图。通常我都是用现有的图片加载库(比如,Picasso 或者 Volley),不过这个ThumbnaiUtils可以创建视频缩略图。

Bitmap.extractAlpha ()返回一个新的Bitmap,capture原始图片的alpha值。有的时候我们需要动态的修改一个元素的背景图片又不希望使用多张图片的时候,通过这个方法,结合Canvas和Paint可以动态的修改一个纯色Bitmap的颜色。

Palette,5.0加入的可以提取一个Bitmap中突出颜色的类,结合上面的Bitmap.extractAlpha。

Executors. newSingleThreadExecutor() 单线程顺序执行的任务队列

StateListDrawable,定义Selector通常的办法都是xml文件,但是有的时候我们的图片资源可能是从服务器动态获取的,比如很多app所谓的皮肤,这种时候就只能通StateListDrawable来完成了,各种addState即可。

WeakHashMap,直接使用HashMap有时候会带来内存溢出的风险,使用WaekHashMap实例化Map。当使用者不再有对象引用的时候,WeakHashMap将自动被移除对应Key值的对象。

CountDownTimer Android自带倒计时类,不用自己new Timer了。

System.arraycopy() 数组拷贝


如果你有什么补充的,欢迎在下方留言飙车- _ -


上一篇 下一篇

猜你喜欢

热点阅读