1. ActionBar
- 参考 郭霖的博客
显示Up按钮
- 第一步:在onCreate方法中增加
getActionBar().setDisplayHomeAsUpEnabled(true)
,针对appcompat v7需采用getSupportActionBar()
,否则会报空指针异常 - 第二步:在AndroidMainfest.xml中配置父Activity
- 参考:Google的Training的实现有效导航
- 针对android 4.1版本以上,在activity的AndroidManifest.xml中增加android:parentActivityName
- 针对Android 4.0或以下版本,在配置中增加
<meta-data>
元素<activity android:name=".DetailActivity" android:label="@string/title_activity_detail" android:parentActivityName=".MainActivity"> <!--android 4.0 及以下 --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
第三步:对android.R.id.home事件的处理
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent upIntent = NavUtils.getParentActivityIntent(this); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { TaskStackBuilder.create(this) .addNextIntentWithParentStack(upIntent) .startActivities(); } else { upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, upIntent); } return true; } } //或者使用NavUtils的导航返回,NavUtils是v4包中的工具包 case android.R.id.home: NavUtils.navigateUpFromSameTask(this); break;
- 第一步:在onCreate方法中增加
2. 存储卡路径
- 手机SD卡位置
- 手机必须root,手机的Android版本为4.2.2
- 数据的基本路径:
storage/sdcard0/Android/data/
- 创建应用的路径:建立app的包名->files->图片文件,如:
edu.niit.training.newsclientv12/files
- Genymotion模拟器的SD卡位置
- 数据的基本路径:
mnt/shell/emulated/0/Android/data
- 创建应用的路径:建立app的包名->files->图片文件,如:
edu.niit.training.newsclientv12/files
- 数据的基本路径:
- Android原生模拟器的SD卡位置
- 与手机SD卡的位置相同
3. Activity
- launchMode
- 用于Activity跳转:
- 决定是否生成新的Activity实例
- 决定是否重用已存在的Activity实例
- 决定是否和其它Activity实例公用一个task里
- task的概念:一个栈结构的对象,可以管理多个Activity,启动一个应用,就创建一个与之对应的task
- 有四种launchMode
- standard
- singleTop
- singleTask
- singleInstance
- 配置:在AndroidManifest.xml中配置
的 android:launchMode
属性 - standard:默认的启动模式,不管有没有已存在的实例,都生成新的实例
- singleTop
- 跳转时系统会先在栈结构中寻找是否有一个FirstActivity实例正位于栈顶,如果有则不再生成新的,而是直接使用。
- 当从SecondActivity跳转到FirstActivity时,系统发现存在有FirstActivity实例,但不是位于栈顶,于是重新生成一个实例。
- 跳转时系统会先在栈结构中寻找是否有一个FirstActivity实例正位于栈顶,如果有则不再生成新的,而是直接使用。
- singleTask:
- 如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
- singleInstance
- 它启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
- 它启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
- 参考博客
- 用于Activity跳转: