1,api10以下尽量用padding,margin很多的时候会有bug,显示不出效果
2,混淆,最好不要混淆实体类,用到反射的时候会报错
-keep public class com.bocop.commons.bean.**
-keepclasseswithmembers class com.bocop.commons.bean.** {
*;
}
3,非常好用的收键盘方式,适用fragment
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
收键盘代码
if (getActivity().getWindow().getAttributes().softInputMode == WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) {
if (getActivity().getCurrentFocus() != null)
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
4,EditText不获取焦点不获取光标的方法
在EditText的包裹空间加入2个属性即可
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
<EditText
android:id="@+id/et_phone"
style="@style/text_black_default_bg"
android:layout_width="match_parent"
android:inputType="phone" />
</LinearLayout>
5,如何实现在Tabhost中的activity overridePendingTransition()切换效果
public class AnimCommon {//维护页面切换效果工具类
public static int in = 0;
public static int out = 0;
public static void set(int a, int b){
in = a ;
out = b;
}
public static void clear(){
in = 0;
out = 0;
}
}
在tabhost的onPause周期实现
public void onPause() {
super.overridePendingTransition(AnimCommon.in, AnimCommon.out);
AnimCommon.clear();
super.onPause();
}
在activity中startActivity或者finish的实现
Intent intent= new Intent(this, *.class);
AnimCommon.set(R.anim.push_left_in, R.anim.push_left_out);
this.startActivity(intent);
6,视图大小的控制是由父视图、布局文件、以及视图本身共同完成的,父视图会提供给子视图参考的大小,而开发人员可以在XML文件中指定视图的大小,然后视图本身会对最终的大小进行拍板
7,当listview含有Header时,在onItemClick事件中请这样获取ItemObject:Object obj = parent.getAdapter().getItem(position); 先判空,再强转为需要的对象。这样就可以避免手动在onItemClick中(positon-header数量)了。转自马天宇大神。
8,在做自定义view的时候,避免不了各种画图,画图就会用到各种对float的运算,这里做运算的时候要长个心眼。
9,主动关闭Alert.Dialog.builder,可以借助builder.create(),返回的对象为AlertDialog。
这里还要说一下,builder本身是没有dismiss()和cancel()方法的
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setView(upload_menu);
alert = alertDialog.create();
alert.show();
alert.dismiss();
10,BitmapFactory.decodeStream(InputStream is,Rect outPadding,Options opts) 返回null的问题
很多人会遇到这样的情况,通过上面的方法返回null的问题,如下代码
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
InputStream openInputStream = null;
try {
openInputStream = getContentResolver().openInputStream(mPicUri);
Bitmap bm = BitmapFactory.decodeStream(
openInputStream, null,
options);
options.inJustDecodeBounds = false;
int be = (int) (options.outHeight / (float) 200);
if (be <= 0)
be = 1;
options.inSampleSize = be;
openInputStream = getContentResolver().openInputStream(mPicUri);
bm = BitmapFactory.decodeStream(openInputStream, null,
options);
Matrix matrix = new Matrix();
mPicBitamp = Bitmap.createBitmap(bm, 0, 0, bm.getWidth() - 10,
bm.getHeight() - 10, matrix, true);
bm.recycle();
showPic(mPicBitamp);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if(null!=openInputStream){
try {
openInputStream.close();
openInputStream=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是因为我们在两个Bitmap.decodeStream()方法中用了同一支流进行了处理,这里需要我们分别给两只不同的流,如下代码达到效果
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
InputStream openInputStream1 = null;
InputStream openInputStream2 = null;
try {
openInputStream1 = getContentResolver().openInputStream(mPicUri);
Bitmap bm = BitmapFactory.decodeStream(
openInputStream1, null,
options);
options.inJustDecodeBounds = false;
int be = (int) (options.outHeight / (float) 200);
if (be <= 0)
be = 1;
options.inSampleSize = be;
openInputStream2 = getContentResolver().openInputStream(mPicUri);
bm = BitmapFactory.decodeStream(openInputStream2, null,
options);
Matrix matrix = new Matrix();
mPicBitamp = Bitmap.createBitmap(bm, 0, 0, bm.getWidth() - 10,
bm.getHeight() - 10, matrix, true);
bm.recycle();
showPic(mPicBitamp);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
closeInputStream(openInputStream1);
closeInputStream(openInputStream2);
}
11,启动三星系统相机导致打开相机的Activity,会被destroy,导致nullpointexception。
发生这个问题可能大家已经分析到了,三星相机会根据用户横持或竖持设备进行旋转,这样就会导致我们开启系统相机的Activity进行销毁重构。我的解决办法是在清单文件里注册android:configChanges="keyboardHidden|orientation|screenSize",如下:
<activity
android:name=".view.WantQuestionsActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize" >
</activity>
并且在开启的Activity代码中重写
@Override
public void onConfigurationChanged(Configuration newConfig) {
Configuration configuration =new Configuration(newConfig);
configuration.orientation =Configuration.ORIENTATION_PORTRAIT;
newConfig.setTo(configuration);
super.onConfigurationChanged(newConfig);
}
其时到这里还会有一个问题就是照片旋转了,这里就不贴代码了,相信大家旋转照片网上能搜索一大把的。
12,listview有一个setEmptyView的方法,当adapter等于null或者item等0的时候会显示你设置的布局。
13,验证是否有合适的activity会响应这个intent,需要执行queryIntentActivities() 来获取到能够接收这个intent的所有activity的list。如果返回的List非空,那么你才可以安全的使用这个intent。
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
如果
isIntentSafe
是
true
, 那么至少有一个app可以响应这个intent。如果是
false
则说明没有app可以handle这个intent。