Android

android中常用的方法

2015-08-01  本文已影响1307人  4528283108ee

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触摸机制了解更多,这个演讲会令你惊叹不已。)

Fragment.instantiate(Contextcontext,Stringfname,Bundleargs);

Arrays.toString();

setUserVisibleHint getUserVisibleHint 判断fragment是否可见

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

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

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

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

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

6、IntentService,一个可以干完活后自己去死且不需要我们去管理子线程的Service。

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

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

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

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

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

12、AsyncQueryHandler,如果做系统工具类的开发,比如联系人短信辅助工具等,肯定免不了和ContentProvider打交道,如果数据量不是很大的情况下,随便搞,如果数据量大的情况下,了解下这个类是很有必要的,需要注意的是,这玩意儿吃异常..

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

先这些了,想起来了再补。。。

一直以为 Lollipop Dialer 接通画面里面那些酷炫的动画(文字部分)是很复杂的做出来的,后来发现其实只有一行。

视频 演示:https://dl.pushbulletusercontent.com/N75Bx03taJzFVjjLkMpzzyqGKT8m5PpH/cm_trltexxLMY48Gyilun07312015153119.mp4

只需要加好 android:animateLayoutChanges="true" 然后 setVisibility 就可以了

1、Throwable接口中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[];2、StackTraceElement类,其中四个方法getClassName(),getFileName(),getLineNumber(),getMethodName()在调试程序打印Log时非常有用;3、UncaughtExceptionHandler接口,再好的代码异常难免,利用此接口可以处理未捕获的异常;4、Resources类中的getIdentifier(name, defType, defPackage)方法,根据资源名称获取其ID,做UI时经

常用到;

5、View中的isShown()方法,以前都是用view.getVisibility() == View.VISIBLE来判断的(╯□╰);6、Arrays类中的asList(T... array)方法,数组转List集合;7、android.text.format.Formatter类中formatFileSize(Context, long)方法,用来格式化文件Size(B→KB→MB→GB);

8、android.media.ThumbnailUtils类,用来获取媒体(图片、视频)缩略图;9、String类中的format(String, Object...)方法,用来格式化strings.xml中的字符串(谢@droider An提示:Context类中getString(int, Object... )方法用起来更加方便);10、View类中的三个方法:callOnClick(),performClick(),performLongClick(),用于触发View的点击事件;

11、TextUtils类中的isEmpty(String)方法,判断字符串是否为null或"";12、TextView类中的append(String)方法,添加文本;13、View类中的getDrawingCache()等一系列方法,目前只知道可以用来截图;14、DecimalFormat类,用于字串格式化包括指定位数、百分数、科学计数法等;15、System类中的arraycopy(src, srcPos, dest, destPos, length)方法,用来copy数组;16、Fragment类中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()时

貌似Fragment的其它生命周期方法都不会被调用,太坑爹!17、Activity类中的onWindowFocusChanged(boolean)方法;18、View类中的getLocationInWindow(int[])方法和getLocationOnScreen(int[])方法,获取View在窗口/屏幕中的位置;19、TextView类中的setTransformationMethod(TransformationMethod)方法,可用来实现“显示密码”功

http://www.zhihu.com/question/33636939#answer-18276269 1/8

2015/8/1

24

Android开发中,有哪些让你觉得相见恨晚的方法、类或接口?-知乎20、TextWatcher接口,用来监听文本输入框内容的改变;

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

编辑于00:07

14条评论•禁止转载

macro hard,程序猿,写得一手好bug谢文森、zp fang、li rizhi等人赞同

楼上很多已经提过且不错的我就不重复写了。1、getParent().requestDisallowInterceptTouchEvent(true);剥夺父view对touch事件的处理权,谁用谁知道。2、ArgbEvaluator.evaluate(float fraction,ObjectstartValue,ObjectendValue);用于根据一个起始颜

色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。3、Canvas中clipRect、clipPath和clipRegion剪切区域的API。

4、Bitmap.extractAlpha ();返回一个新的Bitmap,capture原始图片的alpha值。有的时候我们需要动态的修

改一个元素的背景图片又不希望使用多张图片的时候,通过这个方法,结合Canvas和Paint可以动态的修改

一个纯色Bitmap的颜色。

5、HandlerThread,代替不停new Thread开子线程的重复体力写法。6、IntentService,一个可以干完活后自己去死且不需要我们去管理子线程的Service。7、Palette,5.0加入的可以提取一个Bitmap中突出颜色的类,结合上面的Bitmap.extractAlpha,你懂的。8、Executors.newSingleThreadExecutor();这个是java的,之前不知道它,自己花很大功夫去研究了单线程

顺序执行的任务队列。。9、android:animateLayoutChanges="true",LinearLayout中添加View的动画的办法,支持通过setLayoutTransition()自定义动画。

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

11、GradientDrawable,之前接手公司的项目,发现有个阴影效果还不错,以为是切的图片,一看代码,什

么鬼= =!12、AsyncQueryHandler,如果做系统工具类的开发,比如联系人短信辅助工具等,肯定免不了和ContentProvider打交道,如果数据量不是很大的情况下,随便搞,如果数据量大的情况下,了解下这个类是

很有必要的,需要注意的是,这玩意儿吃异常..

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


14.onUserLeaveHint  用于记录程序进入后台

先这些了,想起来了再补。。。

上一篇下一篇

猜你喜欢

热点阅读