文档章节

Android 开发技巧

SRain215
 SRain215
发布于 2016/04/09 17:19
字数 2713
阅读 61
收藏 8

一、UI相关:

Activity:

   1. Activity.startActivities() 常用于在应用程序中间启动其他的Activity.
    2.Activity.recreate() - 用于重建Activity.
    3.Activity.isChangingConfigurations() - 如果activity中的Configuration会经常被改变的话,使用这方法不用手动保持了。
    4.Activity.onBackPressed() 很方便的管理back键的方法,有时候需要自己控制返回键的事件的时候,可以重写一下。比如加入 “点两下back键退出” 功能。
Fragment:
    1.Fragment.setArguments - Fragment间传递参数
    2.DialogFragment.setShowsDialog() - 显示一个DialogFragment,这里可以控制它是否作为一个dialog
    3.FragmentManager.enableDebugLogging() - 当你检测fragment状态时使用

动画:

    1.ActivityOptions - 可以为activity添加动画

    2.android:enterFadeDuration/android:exitFadeDuration (Drawables) -Drawable有多种状态时,可以定义它展示前的淡入淡出。

Text:

    1.TextView.setError() 在验证用户输入的时候很棒
    2.EditText.setError() - 对用户名,邮箱,手机什么的验证,会弹出一个popupwindow,效果很好

    3.EditText判断是否为空:

String str = usernameET.getText().toString.trim();//这里trim()作用是去掉首位空格,防止不必要的错误  
if(TextUtils.isEmpty(str )){  
//为空  
}  

Html:

    1.Html.fromHtml() 用于生成一个Html,参数可以是一个字符串.个人认为它不是很快,所以我不怎么经常去用.(我说不经常用它是为了重点突出这句话:请多手动构建 Spannable 来替换 Html.fromHtml),但是它对渲染从 web 上获取的文字还是很不错的。

其他:   

    1.LayoutInflater.from() 顾名思义,用于Inflate一个layout,参数是layout的id.这个经常写Adapter的人会用的比较多.
    2.Space space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域.这是一个轻量级的视图组件,它可以跳过Draw,对于需要占位符的任何场景来说都是很棒的。
    3.ValueAnimator.reverse() 这个方法可以很顺利地取消正在运行的动画.我超喜欢.
    4.ActionBar.hide()/.show() 顾名思义,隐藏和显示ActionBar,可以优雅地在全屏和带Actionbar之间转换。
    5.Linkify.addLinks() 在Text上添加链接。很实用。
    6.StaticLayout 在自定义 View 中渲染文字的时候很实用。
    7.GestureDetector 用来监听和相应对应的手势事件,比如点击,长按,慢滑动,快滑动,用起来很简单,比你自己实现要方便许多。
    8.DrawFilter 可以让你在不调用onDrew方法的情况下,操作canvas,比了个如,你可以在创建自定义         9.View 的时候设置一个 DrawFilter,给父 View 里面的所有 View 设置反别名。
    10.ViewStub 它是一个初始化不做任何事情的 View,但是之后可以载入一个布局文件。在慢加载 View 中很适合做占位符。唯一的缺点就是不支持标签,所以如果你不太小心的话,可能会在视图结构中加入不需要的嵌套。
    11.View.generateViewId() - *看名称是生成view 的id,不清楚是干嘛用的
    12.ViewTreeObserver - View的检测工具,监控View各种状态
    13.ViewConfiguration.getScaledTouchSlop() - 使用ViewConfiguration中提供的值以确保所有触摸交互都是统一的
    14.ViewDragHelper - 可拖动的视图实现起来是比较复杂的,这个类可以很好的帮你。
    15.LayoutInflater.from() - 大家应该常用它动态的加载布局,它简化了一系列getSystemService()调用的简单工具
    16.Region.op() - 对比两个渲染之前的区域,如果你有两条路径,怎么知道它是否会重叠呢,使用这个
    17.android:weightSum (LinearLayout) - 如果想使用weight但又不想填满整个屏幕,就可以用来定义总大小
    18.android:duplicateParentState (View) - 可以使子View复制父View的方法。比如一个ViewGroup是可点击的,那可以用这个方法在它被点击时改变所有子View的状态。
    19.android:clipChildren (ViewGroup) - 如果此属性设置为不可用,那么viewgroup的子View在绘制的时候会超出他的范围,做动画时常用到。
    20.android:fillViewport (ScrollView) - 用来解决内容不足时添不满屏幕的问题。
    21.android:tileMode (BitmapDrawable) - 可指定图片使用重复填充的模式。
    22.android:scaleType (ImageView) - 定义Imageview中的缩放与裁剪。
    23.<merge> - 此标签可以在另一个布局中包含别的布局,而不重新创建viewgroup,检查层级来优化视图
    24.PopupWindow - 一个浮动视图,应用应该已经很广泛了。
    25.ActionBar.getThemedContext() - 创建自己的actionBar主题时使用
    26.ThumbnailUtils - 创建图像缩略图,并且可以创建视频的缩略图,就是我们平时图像采样用的
    27.AdapterViewFlipper.fyiWillBeAdvancedByHostKThx() - 因为它有趣,没有其他原因(不明觉厉,不知道怎么个有趣法)


二、系统相关:

    1.Log.getStackTraceString() 方便的日志类工具,方法Log.v()、Log.d()、Log.i()、Log.w()和Log.e()都是将信息打印到LogCat中,有时候需要将出错的信息插入到数据库或一个自定义的日志文件中,那么这种情况就需要将出错的信息以字符串的形式返回来,也就是使用static String getStackTraceString(Throwable tr)方法的时候.
    2.ViewConfiguration.getScaledTouchSlop() 使用ViewConfiguration中提供的值以保证所有触摸的交互都是统一的。这个方法获取的值表示:用户的手滑动这个距离后,才判定为正在进行滑动.当然这个值也可以自己来决定.但是为了一致性,还是使用标准的值较好.
    3.ContextThemeWrapper 方便在运行的时候修改主题.
    4.Pair.create() 方便构建类和构造器的方法。
    5.LocalBroadcastManager - 这要比全局的broadcast更加安全,简单,快速。
    6.Application.registerActivityLifecycleCallbacks - *不懂,从名字你应该可以看出点所以然
    7.-nodpi - 保持显示一致,这里边的不会做自动缩放。
    8.BroadcastRecevier.setDebugUnregister() - 译文是一个有用的测试工具,但不是太懂是什么东西
    9.PackageManager.checkSignatures() - 同时安装两个app时可以用这个进行签名检查。
    10.org.gradle.daemon=true -gradle的设置项,仅在命令行使用。
    11.ActivityManager.clearApplicationUserData() - 重置应用程序,注销用户的最简单方法
    12.PackageManager.setComponentEnabledSetting() - 开启/关闭组件的方法。


三、数据处理:

SDCard:(待续,疑问)

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

数据类型处理:

    1.SparseArray - 一个针对Map<Integer, Object>获这样的hashMap设计的类,原来不太懂,不清楚做了什么优化
    2.Formatter.formatFileSize() 一个区域化的文件大小格式化工具。通俗来说就是把大小转换为MB,G,KB之类的字符串。
    3.PhoneNumberUtils.convertKeypadLettersToDigits - 字母转化为数字,例如T9输入法,比如啊,a,b,c都会转化为2
    4.PhoneNumberUtils.formatNumber() - 电话号码的格式化
    5.PhoneNumberUtils.convertKeypadLettersToDigits 顾名思义.将字母转换为数字,类似于T9输入法,
    6.UrlQuerySanitizer - *译文可能是对URL进行检测(但还是不太懂事干嘛)

Database:

    1.DatabaseUtils - 包含各种数据库使用工具
    2.SQLiteDatabase.yieldIfContendedSafely() - 暂停数据库事物来减少系统使用
    3.SearchRecentSuggestionsProvider - 可以创建有提示效果的Provider
    4.CursorJoiner - 如果你只使用一个数据库的话,那么使用SQL的join就可以了,但你如果你使用了两个独立的CursorJoiner 那么CursorJoiner就很实用了。

Date:

    1.DateUtils.formatDateTime() 用来进行区域格式化工作,输出格式化和本地化的时间或者日期。
    2.AlarmManager.setInexactRepeating - 通过闹钟分组来省电,就如在不唤醒休眠下的间隔中有10个闹钟,在唤醒后将合并为一个,所以可以节约资源。
    3.AlarmManager.setInexactRepeating 通过闹铃分组的方式省电,即使你只调用了一个闹钟,这也是一个好的选择,(可以确保在使用完毕时自动调用 AlarmManager.cancel ()。原文说的比较抽象,这里详细说一下:setInexactRepeating指的是设置非准确闹钟,使用方法:alarmManager.setInexactRepeating(AlarmManager.RTC, startTime,intervalL, pendingIntent),非准确闹钟只能保证大致的时间间隔,但是不一定准确,可能出现设置间隔为30分钟,但是实际上一次间隔20分钟,另一次间隔40分钟。它的最大的好处是可以合并闹钟事件,比如间隔设置每30分钟一次,不唤醒休眠,在休眠8小时后已经积累了16个闹钟事件,而在手机被唤醒的时候,非准时闹钟可以把16个事件合并为一个, 所以这么看来,非准时闹钟一般来说比较节约能源。

屏幕数据:

    1.DisplayMetrics.density 这个方法你可以获取设备像素密度,大部分时候最好让系统来自动进行缩放资源之类的操作,但是有时候控制的效果会更好一些.(尤其是在自定义View的时候).

其他:

    1.versionNameSuffix - 这个gradle设置为了方便的定义版本名,如当前版本是Debug还是Rrelease
    2.Build.VERSION_CODES 这个标明了当前的版本号,在处理兼容性问题的时候经常会用到.点进去可以看到各个版本的不同特性
    3.rgbEvaluator 用于处理颜色的渐变。就像 Chris Banes说的一样,这个类会进行很多自动装箱的操作,所以最好还是去掉它的逻辑自己去实现它。这个没用过,不明其所以然,回头再补充.
    4.SystemClock.sleep() 这个方法在保证一定时间的 sleep 时很方便,通常我用来进行 debug 和模拟网络延时。
    5.ActivityManager.getMemoryClass() 告诉你你的机器还有多少内存,在计算缓存大小的时候会比较有用.

四、模拟器

    1.Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器):

http://www.iplaysoft.com/andy.html

    2.Genymotion - 这是模拟器,不是类,非常快的模拟器,可能比你手机还快: 

http://www.linuxidc.com/Linux/2013-07/88079.htm

五、敏捷开发

    ButterKnife

    ButterKnife是一个专注于Android系统的View、Resource、Action注入框架。

    官网:http://jakewharton.github.io/butterknife/

    gitHub:https://github.com/JakeWharton/butterknife/

    AndroidStudio使用ButterKnife插件:Android Studio中ButterKnife插件的安装与使用

 

 

 

© 著作权归作者所有

共有 人打赏支持
SRain215
粉丝 18
博文 144
码字总数 89414
作品 0
扬州
Android工程师
私信 提问
寻android开发工作

本人现居深圳,12年软件工程毕业,热爱android移动开发,自学android,由于现公司android开发项目少,android开发交流人员少,希望可以找到一个android交流学习、深入系统源码、android架构的...

Sassoon
2013/03/29
519
7
转载:最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
152
3
最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
0
1
系统学习android开发 让android之路更清晰

不知道 android开发 应该怎么学?遇见瓶颈不知道该怎么做? 首先,要明白,android学习应该是系统化的,并不是东一块西一块的学一点代码就OK的了。 系统的学习android开发技术,从应用到底层...

达尔文子
2013/07/10
557
0
10种技巧可提升Android应用运行效果

10种技巧可提升Android应用运行效果 技巧1:从优秀的编程开始 要采用已为用户所接受的运算法则和标准的设计样式,这些被人们长期使用的编程法则也同样适用于Android应用,尤其当这些应用使用...

庸人谷
2012/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx反向代理配置去除前缀

使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法: 方法一:...

架构师springboot
32分钟前
2
0
QianBill API 开发笔记

JWT

BeanHo
43分钟前
3
0
Elasticsearch实战篇——Spring Boot整合ElasticSearch

当前Spring Boot很是流行,包括我自己,也是在用Spring Boot集成其他框架进行项目开发,所以这一节,我们一起来探讨Spring Boot整合ElasticSearch的问题。 本文主要讲以下内容: 第一部分,通...

JAVA_冯文议
52分钟前
3
0
不错的linux下通用的java程序启动脚本

#!/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7...

sprouting
今天
3
0
Linux manjaro系统安装后无法连接wifi,解决方案

笔记本为联想 thinkpad E480 首先通过命令lspci -k看一下原因是否为缺少wifi驱动,如下,如果没有Kernel driver in use,说明缺少驱动。 05:00.0 Network controller: Realtek Semiconducto...

bluecoffee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部