1.系统相册默认保存地址:android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera";
File[] list = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.lastModified() > maxTime) return true; return false; } });
2.读取assets目录中的文件(返回InputStream对象)
InputStream ins = getResources().getAssets().open("xx.html");
assets目录中的内容和res
aw目录中的内容相同,都会按原样被封装在apk文件中
3.在属性中引用资源的语法详解:
@[<package_name>:]<resource_type>/<resource_name>
>>1、R类的package,如果R类的package与Manifest.xml中定义的package相同,可以不指定package,如果引用android系统资源,就需要引用package,如:@android:string/copy;
>>2、R的子类的名称;
>>3、资源的文件名(不包含扩展名)或xml资源文件中标签的android:name属性值;
4.Bundle对象读取传递对象
Bundle相当于一个Map对象,可能存取key-value类型的值,在不同activity中传递数据可以通过Bundle对象传递;
Intent.putExtra()方法实际上在Intent类的内部也是通过使用Bundle对象来存取数据的。如下以putExtra(String,boolean)为例.
public Intent putExtra(String name, boolean value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putBoolean(name, value); return this; }
Activity在释放和装载的过程中也会利用Bundle对象来存取一些值,以便可以恢复Activity之前的状态;
保存:
当Activity对象被释放时,系统会调用Activity.onSaveInstanceState方法保存释放之前的状态(主要是一些变量的值);
protected void onSaveInstanceState(Bundle outState)
此方法只有一个Bundle类型的参数,可以利用此参数保存变量的值。
恢复:
恢复变量的值可以在Activity.onCreate()方法或Activity.onRestoreInstanceState()中完成,系统先调用onCreate(),再调用onRestoreInstanceState()
protected void onCreate(Bundle savedInstanceState)
protected void onRestoreInstanceState(Bundle savedInstanceState)
两个方法都有一个Bundle类型的参数,可以使用此参数恢复变量的值,如果没有保存任何值,则两个参数值都为null,因此恢复变量的值时得先判断savedInstanceState的值是否为null;
onSaveInstanceState和onRestoreInstanceState分别用来保存和恢复状态,但它们不会因为当前Activity状态的主动变化而调用,只有在当前Activity受到外力使状态改变的情况下才会被调用;也就是说比如当来电,Home键回到桌面等情况下由于其它操作使Activity状态发生改变,系统才会调用这两个方法;
5.处理Activity配置属性改变
通过配置android:configChanges属性值处理配置的变化,配置此属性之后系统会调用onConfigurationChanger()方法处理配置改变事件;如果没有配置此属性,在切换横竖屏的时候,Activity会调用onCreate方法;
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // 处理屏幕方向变化 if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // newConfig.orientation == Configuration.ORIENTATION_PORTRAIT; } // 处理键盘配置变化 if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { // newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES; } }
屏幕适配定义原则:大分辨率x小分辨率
在res文件夹下新建一个layout-480x320文件夹,在此文件夹下添加一个布局文件,和layout文件夹下的文件名称一样,如果软件运行在480x320的手机平台上会自动使用此文件夹下的布局文件;
如果想要添加一个运行在320x240的手机上的layout,就需要添加一个layout-320x240文件夹,如果没有相匹配的分辨率,会默认使用layout文件夹下的布局文件;
6.解决EditText自动弹出软件盘事件,只需要在控件的父级控件中加入如下两个属性即可阻止EditText自动弹出软件盘
android:focusable="true"
android:focusableInTouchMode="true"