Android 系统中,那些能大幅提高工作效率的 API 汇总
2017-04-05 13:55
453 查看
TextUtils.isEmpty(CharSequence str)
使用频率超高的字符串判空方法,返回一个 boolean 值,内部实现的判断条件为:str == null || str.length() == 0。备受开发人员喜爱的一个 if 字符串判断,系统已经帮我们封装过。
Html.fromHtml()
解析 Html 格式的富文本内容,并返回一个带样式的字符串,供 TextView 等控件显示。可以解决一些含超链接、图文混排等格式的富文本内容的显示问题。
DateUtils.formatDateTime()
Formatter.formatFileSize(Context context,
long sizeBytes)
格式化文件大小,将字节数据格式化为 B、KB、M 等单位的相应数据。context 参数用于判断返回结果的字符串顺序,right-to-left 还是 left-to-right 形式的。这个工具类免去我们自己转化计算的过程,非常方便,特别适用于应用内文件下载的类似场景。
TypedValue.applyDimension(int unit,
float value, DisplayMetrics metrics)
将指定单位的尺寸数据按照当前设备屏幕信息转化为相应的像素值。其中,TypedValue 为第一个参数提供了常用的单位值,比如:
COMPLEX_UNIT_PX
COMPLEX_UNIT_DIP
COMPLEX_UNIT_PT
COMPLEX_UNIT_SP
源码如下:
Space
view.performClick()
自动调用 View 点击事件。通常按钮等控件只有在用户点击时才能触发其点击事件,该方法可以由某些特殊条件触发模拟用户点击行为。类似的还有performLongClick()方法。
Log.getStackTraceString(Throwable tr)
Log类提供的一个公共静态方法,与常见的Log.i()等方法打印日志到 logcat 控制台不同的是,该方法从 Throwable 对象中获取错误信息,并以字符串的形式返回。当你需要做错误信息的数据持久化,比如保存至本地存储卡中或者上传至服务器时,利用这个方法就非常方便。
Linkify.addLinks()
我们知道对于 TextView 文本控件中的内容,通过android:autoLink属性可以为其添加诸如 web、phone 等固定模版的超链接点击事件。但毕竟系统模版有限,而利用Linkify.addLinks()方法可以添加一些应用内自定义模版,比如新浪微博中的 "@XXX" 格式的超链接跳转等,都可以通过自定义正则表达式来匹配处理。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE)
拦截 Back 键,使 App 进入后台而不是关闭
@Override
public void onBackPressed() {
Intent launcherIntent =newIntent(Intent.ACTION_MAIN); launcherIntent.addCategory(Intent.CATEGORY_HOME);
startActivity(launcherIntent);
}
使用 Back 键返回桌面,但不关闭当前应用,而是使之进入后台,就像按下 Home 键一样。
这个技巧厉害了。通常为了防止出现用户误按 Back 键退出 App 的情况,我们会在应用首页的 Activity 中监听返回键操作,使用 Toast 弱提示甚至 Dialog 强提示的方式给到用户一个再次确认的操作,但无法阻止用户通过返回键逐步关闭应用。
然而,如果用这个方法拦截 App 最后一个 Activity(常见为首页界面),既没有阻碍用户操作(回到桌面),又没有关闭掉我们的应用(后台运行中),间接提高 App 的存活时间,真乃暗度陈仓。并且据我实验,微信、支付宝、微博等 App 都是这么做的,大家不妨一试。
ThumbnailUtils
缩略图工具类,可以根据本地视频文件源、Bitmap 对象生成缩略图,常用的公共静态方法为:
createVideoThumbnail(String filePath, int kind)
extractThumbnail(Bitmap source, int width, int height)
bitmap.extractAlpha()
从源 bitmap 中根据 alpha 获取一个新的 bitmap 对象。比较绕口,通常 App 中的 Icon 多数是纯色透明像素背景组成,利用这个方法可以对该图的非透明区域着色,有多种使用场景,常见如 Button 的 pressed 状态,View 的阴影状态等。举个例子:
ArgbEvaluator
系统提供的一个 TypeEvaluator ,我们只需要提供两个起始颜色值和一个分值,系统会通过特定的算法计算得出一个新的颜色中间值。利用这个类,我们至少可以做两件事情。
第一,用于属性动画中。由于其实现了TypeEvaluator接口,可以用来做自定义属性动画的求值器,改变 View 的显示状态。比如:
第二,利用该类提供的颜色求值算法,配合ViewPager提供的滑动偏离值使用。这种场景常见于使用ViewPager实现的引导页,其背景色随着滑动距离动态改变;使用ViewPager实现的 Tab 样式菜单页面,Tab 中文本内容随着滑动距离动态改变字体颜色(可以参考安卓版微信)。这两种使用都使得ViewPager页面切换过渡得很自然,体验极佳。如:
viewPager.addOnPageChangeListener( newOnPageChangeListener() {
@Override public void onPageScrolled( int position, float positionOffset,int positionOffsetPixels) {
new ArgbEvaluator().evaluate(positionOffset, startColor, endColor);
}
@Override
public void onPageSelected(intposition){ }
@Override
public void onPageScrollStateChanged(intstate){ }
});
另外,关于颜色差值的计算,Google Sample 里有另一种算法,可参考SlidingTabStrip.java文件源码,核心方法内容如下:
/*** Blend {@codecolor1} and {@codecolor2} using the given ratio.
**@paramratio of which to blend. 1.0 will return {@codecolor1},
0.5 will give an even blend, * 0.0 will return {@codecolor2}.
*/
private static int blendColors(int color1,int color2,float ratio){
final float inverseRation =1f- ratio;
floatr = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation)
floatg = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation);
floatb = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); returnColor.rgb((int) r, (int) g, (int)
b);
}
android:weightSum
用于LinearLayout中,用于设置 Children weight 的总比重。在LinearLayout的 children 中,我们经常会使用android:layout_weight按比例分配容器布局的空间,但有时候不一定会分完。以往,有些朋友可能会使用一个空放在最后来达到末尾占位效果。如果你知道这个属性的话,就能少写一些代码。
android:descendantFocusability
用于 ViewGroup 中,解决作为 Parent 的 ViewGroup 与 Children View 之间的焦点占用问题。最最常见的使用场景就是 list item 中含有一些点击效果的控件,比如 Button、CheckBox 等,相信大家都遇到过。取值有三种,含义就不用再多说了:
afterDescendants
beforeDescendants
blocksDescendants
android:duplicateParentState
是否将 View 自身的 drawable state 交给直接 parent ViewGroup 控制,值为 boolean 类型。比如有一个 item 布局,item 中有一个 button,如果点击 item layout 时,需要 button 呈现对应的点击效果,就可以在 button
中用到这个属性。不过,从设计的角度来讲,这种场景还是比较少见的。知道有这个属性就好,不推荐这种交互设计。
android:fillViewport
ScrollView 的一个属性,用于设置内容部分是否填满屏幕,主要针对内容不足以填满屏幕的情况。这里推荐一个使用技巧,参考我之前写的文章:Android 日常开发中,两个非常实用的布局技巧。
android:adjustViewBounds
使用频率超高的字符串判空方法,返回一个 boolean 值,内部实现的判断条件为:str == null || str.length() == 0。备受开发人员喜爱的一个 if 字符串判断,系统已经帮我们封装过。
Html.fromHtml()
解析 Html 格式的富文本内容,并返回一个带样式的字符串,供 TextView 等控件显示。可以解决一些含超链接、图文混排等格式的富文本内容的显示问题。
DateUtils.formatDateTime()
Formatter.formatFileSize(Context context,
long sizeBytes)
格式化文件大小,将字节数据格式化为 B、KB、M 等单位的相应数据。context 参数用于判断返回结果的字符串顺序,right-to-left 还是 left-to-right 形式的。这个工具类免去我们自己转化计算的过程,非常方便,特别适用于应用内文件下载的类似场景。
TypedValue.applyDimension(int unit,
float value, DisplayMetrics metrics)
将指定单位的尺寸数据按照当前设备屏幕信息转化为相应的像素值。其中,TypedValue 为第一个参数提供了常用的单位值,比如:
COMPLEX_UNIT_PX
COMPLEX_UNIT_DIP
COMPLEX_UNIT_PT
COMPLEX_UNIT_SP
源码如下:
Space
view.performClick()
自动调用 View 点击事件。通常按钮等控件只有在用户点击时才能触发其点击事件,该方法可以由某些特殊条件触发模拟用户点击行为。类似的还有performLongClick()方法。
Log.getStackTraceString(Throwable tr)
Log类提供的一个公共静态方法,与常见的Log.i()等方法打印日志到 logcat 控制台不同的是,该方法从 Throwable 对象中获取错误信息,并以字符串的形式返回。当你需要做错误信息的数据持久化,比如保存至本地存储卡中或者上传至服务器时,利用这个方法就非常方便。
Linkify.addLinks()
我们知道对于 TextView 文本控件中的内容,通过android:autoLink属性可以为其添加诸如 web、phone 等固定模版的超链接点击事件。但毕竟系统模版有限,而利用Linkify.addLinks()方法可以添加一些应用内自定义模版,比如新浪微博中的 "@XXX" 格式的超链接跳转等,都可以通过自定义正则表达式来匹配处理。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE)
拦截 Back 键,使 App 进入后台而不是关闭
@Override
public void onBackPressed() {
Intent launcherIntent =newIntent(Intent.ACTION_MAIN); launcherIntent.addCategory(Intent.CATEGORY_HOME);
startActivity(launcherIntent);
}
使用 Back 键返回桌面,但不关闭当前应用,而是使之进入后台,就像按下 Home 键一样。
这个技巧厉害了。通常为了防止出现用户误按 Back 键退出 App 的情况,我们会在应用首页的 Activity 中监听返回键操作,使用 Toast 弱提示甚至 Dialog 强提示的方式给到用户一个再次确认的操作,但无法阻止用户通过返回键逐步关闭应用。
然而,如果用这个方法拦截 App 最后一个 Activity(常见为首页界面),既没有阻碍用户操作(回到桌面),又没有关闭掉我们的应用(后台运行中),间接提高 App 的存活时间,真乃暗度陈仓。并且据我实验,微信、支付宝、微博等 App 都是这么做的,大家不妨一试。
ThumbnailUtils
缩略图工具类,可以根据本地视频文件源、Bitmap 对象生成缩略图,常用的公共静态方法为:
createVideoThumbnail(String filePath, int kind)
extractThumbnail(Bitmap source, int width, int height)
bitmap.extractAlpha()
从源 bitmap 中根据 alpha 获取一个新的 bitmap 对象。比较绕口,通常 App 中的 Icon 多数是纯色透明像素背景组成,利用这个方法可以对该图的非透明区域着色,有多种使用场景,常见如 Button 的 pressed 状态,View 的阴影状态等。举个例子:
ArgbEvaluator
系统提供的一个 TypeEvaluator ,我们只需要提供两个起始颜色值和一个分值,系统会通过特定的算法计算得出一个新的颜色中间值。利用这个类,我们至少可以做两件事情。
第一,用于属性动画中。由于其实现了TypeEvaluator接口,可以用来做自定义属性动画的求值器,改变 View 的显示状态。比如:
第二,利用该类提供的颜色求值算法,配合ViewPager提供的滑动偏离值使用。这种场景常见于使用ViewPager实现的引导页,其背景色随着滑动距离动态改变;使用ViewPager实现的 Tab 样式菜单页面,Tab 中文本内容随着滑动距离动态改变字体颜色(可以参考安卓版微信)。这两种使用都使得ViewPager页面切换过渡得很自然,体验极佳。如:
viewPager.addOnPageChangeListener( newOnPageChangeListener() {
@Override public void onPageScrolled( int position, float positionOffset,int positionOffsetPixels) {
new ArgbEvaluator().evaluate(positionOffset, startColor, endColor);
}
@Override
public void onPageSelected(intposition){ }
@Override
public void onPageScrollStateChanged(intstate){ }
});
另外,关于颜色差值的计算,Google Sample 里有另一种算法,可参考SlidingTabStrip.java文件源码,核心方法内容如下:
/*** Blend {@codecolor1} and {@codecolor2} using the given ratio.
**@paramratio of which to blend. 1.0 will return {@codecolor1},
0.5 will give an even blend, * 0.0 will return {@codecolor2}.
*/
private static int blendColors(int color1,int color2,float ratio){
final float inverseRation =1f- ratio;
floatr = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation)
floatg = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation);
floatb = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); returnColor.rgb((int) r, (int) g, (int)
b);
}
android:weightSum
用于LinearLayout中,用于设置 Children weight 的总比重。在LinearLayout的 children 中,我们经常会使用android:layout_weight按比例分配容器布局的空间,但有时候不一定会分完。以往,有些朋友可能会使用一个空放在最后来达到末尾占位效果。如果你知道这个属性的话,就能少写一些代码。
android:descendantFocusability
用于 ViewGroup 中,解决作为 Parent 的 ViewGroup 与 Children View 之间的焦点占用问题。最最常见的使用场景就是 list item 中含有一些点击效果的控件,比如 Button、CheckBox 等,相信大家都遇到过。取值有三种,含义就不用再多说了:
afterDescendants
beforeDescendants
blocksDescendants
android:duplicateParentState
是否将 View 自身的 drawable state 交给直接 parent ViewGroup 控制,值为 boolean 类型。比如有一个 item 布局,item 中有一个 button,如果点击 item layout 时,需要 button 呈现对应的点击效果,就可以在 button
中用到这个属性。不过,从设计的角度来讲,这种场景还是比较少见的。知道有这个属性就好,不推荐这种交互设计。
android:fillViewport
ScrollView 的一个属性,用于设置内容部分是否填满屏幕,主要针对内容不足以填满屏幕的情况。这里推荐一个使用技巧,参考我之前写的文章:Android 日常开发中,两个非常实用的布局技巧。
android:adjustViewBounds
相关文章推荐
- Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...)
- Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...)
- Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...)
- Android系统中,能大幅提高工作效率的API汇总
- Android提高工作效率Api、小技巧汇总
- XP系统贯用的5个键,提高你的工作效率
- 如何提高Linux系统命令行的工作效率
- 工作中那些提高你效率的神器(第一篇)_Everything
- 聊聊那些可以提高工作效率的Linux命令
- 工作中那些提高你效率的神器(第二篇)_Listary
- 第四章 提高工作效率的16条Android开发小经验
- 如何提高Linux系统命令行的工作效率
- Android之倍数提高工作效率的 Android Studio 奇技
- IBM推出全新存储系统以提高效率、优化工作负载
- IBM推出全新存储系统以提高效率、优化工作负载
- Android 上能提高学习工作效率的应用
- Android之倍数提高工作效率的 Android Studio 奇技
- 提高工作效率的16条Android开发小经验
- Android:倍数提高工作效率的 Android Studio 奇技
- 提高工作效率的16条Android开发小经验