总结一下开发的小技巧,供各位参考。
1.控件执行animation不起作用。
在执行animation之前,要保证view是可见或占位的,否则动画不作用。(当时也不知道为什么会犯这种错误)
2.ListView.getCount,Adapter.getCount以及getChildCount()方法
Adapter.getCount()返回数据item数量,不包括头尾;
ListView.getCount()返回控件数量(屏幕中可视的控件数),包括HeadView和FootView;
ListView.getChildCount()返回当前屏幕显示的item数量;
3.dp
使用dp做度量单位,不能达到控件按比例分配满屏的效果,因为dp跟像素密度有关,如果屏幕分辨率高,但是像素密度低,就有可能达不到效果。
4.控件获取焦点
View.setFoucus(true);
View.setFoucesInTouchMode(true);
View.requestFoucs();
5.权重
权重值越大,控件比例越大。哪个方向上需要使用权重,则那个方向的值就设为0dp,这是官方建议写法。例如横向需要设置权重,则layout_widht="0dp"。
网上说的什么设置wrap_content或者match_parent都是不正确的用法。
6.StringBuffer与StringBuilder
StringBuffer与StringBuilder类似,都是在字符串需要做修改时使用,不过前者是线程安全,在多线程情况下常用,后者线程不安全,在单线程情况下使用多。
7.监听软键盘回车键
重写activity的dispatchTouchEvent方法,判断event.getKeyCode() == KeyEvent.KEYCODE_ENTER是否成立。
8.listSelector属性
设置item点击效果时,引用selector。一般会把selector放在drawable文件夹里面,如果是这样的话,属性是drawable <item android:drawable="@drawable/图片" >。
如果想使用color值,那么可以把selector放在color文件夹里,属性就是color <item android:color="@color/颜色值" >。(这个一位哥们告诉我的)
比较简单的设置listSelector的方法,listSelector="@android:color/black"直接设置颜色值,点击效果为黑色,常态为透明。
9.获取屏幕分辨率等参数比较靠谱的方法
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
dm.widthPixels;
dm.heightPixels;
还可以在自定义view中直接获取屏幕参数(这也是一位哥们告诉我的):
<pre name="code" class="html">DisplayMetrics metrics = getResources().getDisplayMetrics();
metrics.widthPixels;
metrics.heightPixels;
10.activity dispatchTouchEvent
所有屏幕的touch事件都是由这个方法分发,在事件分发给window之前调用
11.view clickable方法
clickable 表示其能处理Touch事件,故其的onInterceptTouchEvent方法将事件传递给自己的onTouchEvent方法处理
12.SQLite onCreate方法执行时机
在调getReadableDatabase或getWritableDatabase时,会判断指定的数据库是否存在,不存在则调SQLiteDatabase.create创建, onCreate只在数据库第一次创建时才执行
13.ContentProvider onCreate方法执行时机
onCreate方法执行得非常早,比Application onCreate方法还早执行,应用一开始加载它就会先执行。当然啦,这是在数据库不存在的情况下。
14.全局变量的使用
尽量不要在Activity或Service中声明public或者protect静态变量来给别的类使用,因为这没有意义,而且静态变量是常驻内存,生命周期很长,会很耗资源。全局变量最好是写在Application中,通过一个get方法来获取。
15.scrollTo和scrollBy的使用
用Scroller类实现滑动效果,这很多人都知道。使用Scroller,其实最本质也是通过调用view的scrollTo来实现的。很多人在刚开始用Scroller时用不好,往往达不到预期的效果,是因为对这个方法理解有误(我就是这样的)。View.scrollTo(),这是使View的子控件或者内容(文本之类)执行移动,而非View本身,scrollBy也是同理,谨记这一点就能实现效果了。
如果要移动View本身,可以使用如下的方法:
public void offsetLeftAndRight(int offset)用于左右移动
public void offsetTopAndBottom(int offset)用于上下移动
16.this对象
this.getClass()获取当前运行的(被装载的)类,需要考虑继承关系;
this.方法/属性是获取当前类(不需要考虑继承)的方法/属性。
17.中断http请求
HttpClient一般会作为单例使用,多个请求都是复用这一个client,所以想要中断请求,应该是中断HttpGet或者HttpPost才对。httpGet通过调用abort方法来中断释放资源,而urlconnection则可调用disconnect。
18.activity去掉标题方法
通过在onCreate方法的setContentView之前执行requestWindowFeature(Window.FEATURE_NO_TITLE);
也可通过在配置文件中对activity或application设置属性@android:style/Theme.NoTitleBar;
两者方式实现有一个比较明显的区别,通过第一次实现的话,在启动activity时,标题栏会先出现,然后再消失,而第二种方式没有这样的缺陷。