Android开发中,有哪些让你以为相见恨晚的方法、类或接口?

ThumbnailUtils.extractThumbnail(bitmap, width, height); 压缩图片到指定大小的方法,之前都是一次次的createbitmap,而后用matrix去缩放,麻烦死了。html

一、Throwable类中的getStackTrace()方法,根据这个方法能够获得函数的逐层调用地址,其返回值为StackTraceElement[];

二、StackTraceElement类,其中四个方法getClassName(),getFileName(),getLineNumber(),getMethodName()在调试程序打印Log时很是有用;

三、UncaughtExceptionHandler接口,再好的代码异常不免,利用此接口能够处理未捕获的异常;
使用参见:Android使用UncaughtExceptionHandler捕获全局异常

四、Resources类中的getIdentifier(name, defType, defPackage)方法,根据资源名称获取其ID,作UI时常常用到;

五、View中的isShown()方法,之前都是用view.getVisibility() == View.VISIBLE来判断的(╯□╰);

六、Arrays类中的asList(T... array)方法,数组转List集合;反过来List.toArray()

七、android.text.format.Formatter类中formatFileSize(Context, long)方法,用来格式化文件Size(B → KB → MB → GB);

八、android.media.ThumbnailUtils类,用来获取媒体(图片、视频)缩略图;

九、String类中的format(String, Object...)方法,用来格式化strings.xml中的字符串(多谢 @droider An 提示:Context类中getString(int, Object... )方法用起来更加方便);

十、View类中的三个方法:callOnClick()performClick()performLongClick(),用于触发View的点击事件;

十一、TextUtils类中的isEmpty(String)方法,判断字符串是否为null或"";

十二、TextView类中的append(String)方法,添加文本;

1三、View类中的getDrawingCache()等一系列方法,目前只知道能够用来截图;

1四、DecimalFormat类,用于字串格式化包括指定位数、百分数、科学计数法等;

1五、System类中的arraycopy(src, srcPos, dest, destPos, length)方法,用来copy数组;

1六、Fragment类中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()时貌似Fragment的其它生命周期方法都不会被调用,太坑爹!

1七、Activity类中的onWindowFocusChanged(boolean)方法;

1八、View类中的getLocationInWindow(int[])方法和getLocationOnScreen(int[])方法,获取View在窗口/屏幕中的位置;

1九、TextView类中的setTransformationMethod(TransformationMethod)方法,可用来实现“显示密码”功能;

20、TextWatcher接口,用来监听文本输入框内容的改变;

2一、View类中的setSelected(boolean)方法结合android:state_selected=""用来实现图片选中效果;

2二、Surface设置透明:SurfaceView.setZOrderOnTop(true);
SurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
可是会挡住其它控件;

2三、ListView或GridView类中的setFastScrollEnabled(boolean)方法,用来设置快速滚动滑块是否可见,固然前提是item够多;

2四、PageTransformer接口,用来自定义ViewPager页面切换动画,用setPageTransformer(boolean, PageTransformer)方法来进行设置;

2五、apache提供的一系列jar包:commons-lang.jarcommons-collections.jarcommons-beanutils.jar等,里面不少方法多是你曾经用几十几百行代码实现过的,可是执行效率或许要差不少,好比:ArrayUtils,StringUtils……;

2六、AndroidTestCase类,Android单元测试;

2七、Activity类中的onNewIntent(intent)方法。java

一、getParent().requestDisallowInterceptTouchEvent(true);剥夺父view对touch事件的处理权,谁用谁知道。

二、ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现相似于微信底部栏滑动颜色渐变。

三、Canvas中clipRect、clipPath和clipRegion剪切区域的API。

四、Bitmap.extractAlpha ();返回一个新的Bitmap,capture原始图片的alpha值。有的时候咱们须要动态的修改一个元素的背景图片又不但愿使用多张图片的时候,经过这个方法,结合Canvas和Paint能够动态的修改一个纯色Bitmap的颜色。

五、HandlerThread,代替不停new Thread开子线程的重复体力写法。

六、IntentService,一个能够干完活后本身去死且不须要咱们去管理子线程的Service。

七、Palette,5.0加入的能够提取一个Bitmap中突出颜色的类,结合上面的Bitmap.extractAlpha,你懂的。

八、Executors. newSingleThreadExecutor();这个是java的,以前不知道它,本身花很大功夫去研究了单线程顺序执行的任务队列。。

九、android:animateLayoutChanges="true",LinearLayout中添加View的动画的办法,支持经过setLayoutTransition()自定义动画。

十、ViewDragHelper,自定义ViewGroup处理各类事件很累吧,嗯? what the fuck!!

十一、GradientDrawable,以前接手公司的项目,发现有个阴影效果还不错,觉得是切的图片,一看代码,什么鬼= =!

十二、AsyncQueryHandler,若是作系统工具类的开发,好比联系人短信辅助工具等,确定免不了和ContentProvider打交道,若是数据量不是很大的状况下,随便搞,若是数据量大的状况下,了解下这个类是颇有必要的,须要注意的是,这玩意儿吃异常..

1三、ViewFlipper,实现多个view的切换(循环),可自定义动画效果,且可针对单个切换指定动画。

1四、有朋友提到了在自定义View时有些方法在开启硬件加速的时候没有效果的问题,在API16以后确实有不少方法不支持硬件加速,一般咱们关闭硬件加速都是在清单文件中经过<application android:hardwareAccelerated="false" ...>,其实android也提供了针对特定View关闭硬件加速的方法,调用View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);便可。

1五、android util包中的Pair类,能够方便的用来存储一"组"数据。注意不是key value。

1六、PointF,graphics包中的一个类,咱们常常见到在处理Touch事件的时候分别定义一个downX,一个downY用来存储一个坐标,若是坐标少还好,若是要记录的坐标过多那代码就很差看了。用PointF(float x, float y);来描述一个坐标点会清楚不少。

1七、StateListDrawable,定义Selector一般的办法都是xml文件,可是有的时候咱们的图片资源多是从服务器动态获取的,好比不少app所谓的皮肤,这种时候就只能通StateListDrawable
来完成了,各类addState便可。

1八、android:descendantFocusability,ListView的item中CheckBox等元素抢焦点致使item点击事件没法响应时,除了给对应的元素设置 focusable,更简单的是在item根布局加上android:descendantFocusability=”blocksDescendants”

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

20、includeFontPadding="false",TextView默认上下是有必定的padding的,有时候咱们可能不须要上下这部分留白,加上它便可。

2一、Messenger,面试的时候一般都会被问到进程间通讯,通常状况下你们都是开始背书,AIDL巴拉巴拉。。有一天在鸿神的博客看到这个,嗯,如他所说,又能够装一下了。

2二、TextView.setError();用于验证用户输入。

2三、ViewConfiguration.getScaledTouchSlop();触发移动事件的最小距离,自定义View处理touch事件的时候,有的时候须要判断用户是否真的存在movie,系统提供了这样的方法。

2四、ValueAnimator.reverse(); 顺畅的取消动画效果。

2五、ViewStub,有的时候一块区域须要根据状况显示不一样的布局,一般咱们都会经过setVisibility的方法来显示和隐藏不一样的布局,可是这样默认是所有加载的,用ViewStub能够更好的提高性能。

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

UrlQuerySanitizer——使用这个工具能够方便对 URL 进行检查。

Fragment.setArguments——由于在构建 Fragment 的时候不能加参数,因此这是个很好的东西,能够在建立 Fragment 以前设置参数(即便在 configuration 改变的时候仍然会致使销毁/重建)。

DialogFragment.setShowsDialog ()—— 这是一个很巧妙的方式,DialogFragment 能够做为正常的 Fragment 显示!这里可让 Fragment 承担双重任务。我一般在建立 Fragment 的时候把 onCreateView ()和 onCreateDialo.g ()都加上,就能够建立一个具备双重目的的 Fragment。

FragmentManager.enableDebugLogging ()——在须要观察 Fragment 状态的时候会有帮助。

LocalBroadcastManager——这个会比全局的 broadcast 更加安全,简单,快速。像 otto 这样的 Event buses 机制对你的应用场景更加有用。

PhoneNumberUtils.formatNumber ()——顾名思义,这是对数字进行格式化操做的时候用的。

Region.op()——我发如今对比两个渲染以前的区域的时候很实用,若是你有两条路径,那么怎么知道它们是否是会重叠呢?使用这个方法就能够作到。

Application.registerActivityLifecycleCallbacks——虽然缺乏官方文档解释,不过我想它就是注册 Activity 的生命周期的一些回调方法(顾名思义),就是一个方便的工具。

versionNameSuffix——这个 gradle 设置可让你在基于不一样构建类型的 manifest 中修改版本名这个属性,例如,若是须要在在 debug 版本中以”-SNAPSHOT”结尾,那么就能够轻松的看出当前是 debug 版仍是 release 版。

CursorJoiner——若是你是只使用一个数据库的话,使用 SQL 中的 join 就能够了,可是若是收到的数据是来自两个独立的 ContentProvider,那么 CursorJoiner 就很实用了。

Genymotion——一个很是快的 Android 模拟器,本人一直在用。

-nodpi——在没有特别定义的状况下,不少修饰符(-mdpi,-hdpi,-xdpi等等)都会默认自动缩放 assets/dimensions,有时候咱们须要保持显示一致,这种状况下就可使用 -nodpi。

BroadcastRecevier.setDebugUnregister ()——又一个方便的调试工具。

Activity.recreate ()——强制让 Activity 重建。

PackageManager.checkSignatures ()——若是同时安装了两个 app 的话,能够用这个方法检查。若是不进行签名检查的话,其余人能够轻易经过使用同样的包名来模仿你的 app。


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——经过使用备份文件进行文件的原子化操做。这个知识点以前我也写过,不过最好仍是有出一个官方的版本比较好。


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系统触摸事件机制大多时候可以默认处理,不过有时候你须要使用这个方法来剥夺父级控件的控制权(顺便说一下,若是你想对Android触摸机制了解更多,这个演讲会令你惊叹不已。)

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——经过使用备份文件进行文件的原子化操做。这个知识点以前我也写过,不过最好仍是有出一个官方的版本比较好。



-----------------------------------------------------------------------------------------------

译文太多不知道出自哪里的译文了,并且有些不全,原文出自 Dan Lew 博客,有 5 篇,强烈推荐。

Android Tips Round-Up, Part 1
Android Tips Round-Up, Part 2
Android Tips Round-Up, Part 3
Android Tips Round-Up, Part 4
Android Tips Round-Up, Part 5

最后作个福利广告 zhengxiaopeng/android-dev-bookmarks · GitHubgit

相关文章
相关标签/搜索