首页 > 代码库 > Android 开发技巧总结

Android 开发技巧总结

1.项目中设置每个activity的启动模式(如果堆栈中存在此activity就会重用,并提到栈顶,不会创建新的activity) 

android:launchMode="singleTask"

2.如果界面中的布局被弹出的软键盘改变,则在对应的activity中加入如下代码即可。

android:windowSoftInputMode="adjustPan|stateHidden"

3.去掉ScrollView拉倒边缘时的效果:

scrollView.setOverScrollMode(View.OVER_SCROLL_NEVER);

去掉listview和viewpager拉倒边缘时的效果

android:overScrollMode="never"

4.去掉gridview的item点击效果

android:listSelector="@android:color/transparent"

或者在代码中实现:

gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));

5.在ScrollView放入完整显示的listview和gridview,在重写完默认的三个方法以后,再重写onMeasure()方法。重写listview和gridview

public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)  

    {

       int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);  

       super.onMeasure(widthMeasureSpec, expandSpec);  

}

6.用Afinal向数据库中存取数据时,定义的类如果有id属性不要设置id的值,afinal默认的数据库中有id属性。

7.匹配数据时,认真看好参数,不要浪费不必要的时间。

8. onActivityResult()发生在onResume()之前。

9.获取gridview或listview的item项

因为在适配器中已经配置了如下内容

private List<SortModel> list;ride

public Object getItem(int position) {

return list.get(position);

}

获取每一项时的方法如下:

gridView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

// TODO Auto-generated method stub

SortModel model = (SortModel) arg0.getItemAtPosition(arg2);

}

});

10.如果以某个时间点判断第一次下载并保存到数据库中的某些内容是否需要更新的时候,一定要确保需要数据下载成功以后再将这个时间点进行保存,而且要放到每次启动一定会执行的地方去执行。

12.Alt+Shift+J javadoc的快捷生成方式,但是光标要放在类中。

13.如果布局中很多地方都长一样,可以抽取成一个style
14.如果嵌套太多,导致阅读性降低,可以用include 包含一个布局

  1. <!-- include标签内设置id属性后(android:id),其引用的布局layout内的id属性就不起作用了,怀疑是其引用的layout外层包裹了一层include标签   
  2. 或者是覆盖了其内的属性id-->  
  3. <!-- 如果没有include标签,所有布局代码都写在一个xml文件中,界面会显得很冗余,可读性很差。而且界面加载的时候是按照顺序加载的,前面的布局不能  
  4. 调用其后面的布局id。而采用include后,一个include中可以引用其后的include中的布局id属性 -->  
  5. <include android:id="@id/titleLayout" layout="@layout/app_title" />  


15.如果在activity中 共性太多,可以抽取出一个父类,一般叫baseActivity
16.如果要做适配,根据当前手机屏幕的大小(高在前,宽在后)创建一个values 文件夹,同时在dimens 文件夹中配置好大小。
17.如果想在按下手机的后退键,无效,可以在继承activity类 中  重写 onKeyDown  然后返回将返回值设置为true。

18.如果一进入activity就弹出键盘的解决方法:

阻止一进入Activity,editText就获得焦点弹出输入法对话框,只需要在AndroidManifest.xml相应的activity标签中加入下面这句话即可实现。

android:windowSoftInputMode="stateHidden|adjustResize"

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);//默认不弹出软键盘

19.关于visibility的设置,invisivible是不可见但占据着位置,gone不仅不可见而且完全消失,不占据位置。

20.在eclipse中导入github的项目,基本就是samples和library。

1)先将samples和library导入到androidSDK的samples的列表下(如android-17中)

2)右键newèothers,然后选择如下

 

如果放到了android-17中就在对应的地方打钩。

 

然后找到相应的数据导入即可。

21.设置没有标题栏

requestWindowFeature(Window.FEATURE_NO_TITLE);

22.图标

hdpi 72*72

ldpi 32*32

mdpi 48*48

xhdpi 96*96

xxhdpi 144*144

23.写Edittext的时候,有的手机没有光标的问题的解决,这句话写上就行了。

android:textCursorDrawable="@null"

24. 去掉ImageView的叹号

android:contentDescription="@string/Image"

去掉LinearLayout的异常

android:baselineAligned="false"

25.progressbar可以设置通过返回键消失。

dialog = ProgressDialog.show(context, str1, str2, false, true);

最后一个boolean值设置为true即可。

取消的时候用dialog.cancel();

26.从网络加载数据的时候,显示到页面,一定要等数据加载成功以后再显示相应的控件。

27.如果定义了一个类,以后要用到这个类的属性的时候,即使初始化了没有值的情况下也会报空指针的,用之前一定要保证有值。

 

People people = new People();

这样写people就不为空。

 

People peoplea = new People();

peoplea.setName("123"); //如果设置了name属性,则下面不报错,否则会报空指针异常,因为没有给name赋值,peoplea.getName()默认的值为null;

if(peoplea.getName().equals("123")){

Log.e("", "没有报错,类为空!");

}else{

Log.e("", "没有报错,类不为空!"+peoplea.getAge());

}

 

类用的时候:

People people = null ;

if(people == null){ //people此时为null,null是不能与任何字符串进行equals判断的,否则会报空指针异常。

Log.e("", "没有报错,类为空!");

}

28.百度地图的安全码是eclipse的shal值,获取key值的时候的操作

获取方法:Window èPreferencesèAndroidèBuild

然后在后面+;+包名,即可申请成功。

29.在fragment中用afinal框架的时候,在失败的时候弹出的toast不要用getActivity()有时候会报空指针。

30.程序中只要有需要耗时的操作,就加一个可以取消的dialog。

31.类未赋值的时候就是null,如:private String str;

赋值了就不是null了,private String str = "";

此时就是长度为0的字符串。