活动被回收了:
输入一段文字,然后去启动另一个activity,上一个活动回收,当back回来时,文字没有了等,这时候用覆写回调方法把临时数据保存下来:onSaveInstanceState(Bundle b){
super.onSaveInstanceState(b);
b.putString("datakey","hello");//putInt
}
然后在onCreate()中恢复数据
onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
ReData=savaInstanceState.getString("datakey");
}
四种启动模式
在activity的配置文件中指定:android:launchMode="xxx"
有standard,singleTop。singleTask,singleStance.
默认是standard,缺点是可能重复创建多个相同的活动,a-a a-a a-a
singleTop:可以判断栈顶的活动是不是返回栈的活动,如果不是才会创建新的实例,但是一个活动还是会重复创建不同的实例,例如a-b b-a a-b,
singleTask:启动活动的时候会在返回栈中寻找有没有该活动的实例,有的话就把其上面的活动全部出栈,这样就在栈顶,而且保证了一个活动只有一个实例。
singleInstance:在一个application中上面三中都视情况而定,但如果多个application,每个application都有自己的返回栈,当一个活动是可以被多个application访问的时候,这个活动必然会在多个返回栈中产生多个实例,而singleInstance会有一个单独的返回栈来管理这个活动。
android四种布局
LinearLayout:
layoutgravity="top/bottom/center"还有其它属性。
RelativeLayout:
android:layout_alignParentLeft="true"
android:layout_above/below/torightof/toleftof="@id/xxx"
Framelayout:
没有任何定位方式,所有的控件都摆放在布局的左上角,动态加载碎片中使用。
TableLayout:
自定义控件:
所有的控件都直接或间接继承view,所有的布局都是直接或间接继承viewgroup.viewgroup可以包含很多子view 子viewgroup.
view分:textview,imageview viewgroup.
textview 分:edittext button
viewGroup分:四种布局
引入布局;include
自定义布局:新建一个class继承四个布局,
然后在xml中<com....></com....>
发送短信
Editor to,msg;
SmsManager s=SmsManager.getDefault();
s.sendTextMessage(to.getText().toString(),null,msg.getText().toString(),null,null);
自拍
因为使用intent来启动自带的相机application,所以当返回上一个活动时要带回数据。startActiviyForResult();覆写onActivityResult();
1.创建一个file对象,获取手机的根目录
File outputImage = new File(Environment.getExtranalStorageDirectory(),"temp.jpg");
2.用Uri的fromfile()将file对象转为uri对象,标识这张图片
imageuri=Uri.fromfile(outputImage);
3.启动相机application,指定intent的action(隐式)为相机,指定图片的输出地址。
new intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,imgeUri);
startActivityForResult(intent,TAKE_PHOTO);
4.启动时forresult,所以会有结果返回onactivityresult()。
其中再次创建intent启动剪裁程序,裁剪后同样输出到image.jpg,裁剪完成之后又会回调到onactivityResult(),将图片解析成bitmap对象,然后设置到imageview中显示出来。
onActivityResult(int requsetCode,int resultCode,Intent data){
switch(requestcode){
case TAKE_PHOTO:
if(resultCode==RESULT_OK){
new intent("com.android.camera.action.crop");
intent.setDataAndType(imageuri,"image/*");
intent.putExtra("scale",true);//图片太大,不需要全部。
intent.putExtra(MediaStore.EXTRA_OUTPUT,imgeUri);
startActivityForResult(intent,CROP_PHOTO);
case CROP_PHOTO:
if(resultCode==RESULT_OK){
Bitmap b=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageuri));
picture.setimageBitmap(b);
}
}
}