[Android官方Demo系列](API 15)AppNavigation

路径:samples\android-15\AppNavigation
简介:APP导航

这里写图片描述

主要知识点:
  • 介绍了活动之间导航的知识

代码解析:

https://github.com/lzctbyong/AppNavigation.git

  • 知识点一:声明父子活动的关系
<activity
android:parentActivityName="com.example.myfirstapp.MainActivity"

//API<16
    <meta-data
    android:name="android.support.PARENT_ACTIVITY"
    android:value="com.example.myfirstapp.MainActivity"/>
</activity>
  • 知识点二:在左上方添加返回上一级图标
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  • 知识点三:navigateUpFromSameTask( )
@Override
public boolean onOptionsItemSelected(MenuItemitem){
switch(item.getItemId()){
   //Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
    return true;
}
return super.onOptionsItemSelected(item);
}

/*
However, using  navigateUpFromSameTask() is suitableonly when your app is the owner of the currenttask(that is, the user began this task from your app). If that's not true and youractivity was started in a task that belongs to a different app

大概是说,该方法只是用于同一个APP任务栈的返回,如果是其他APP调用的,则不适用。
*/
  • 知识点四:加入活动栈
1. calling shouldUpRecreateTask()
checkwhether the current activity instance exists in a different app's task.

2.If it returns true,build a new task  with TaskStackBuilder.Otherwise, you can use the    navigateUpFromSameTask() method as shown above.

For example:

public boolean onOptionsItemSelected(MenuItemitem){
     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{
    NavUtils.navigateUpTo(this,upIntent);
}
    return true;
}
    return  super.onOptionsItemSelected(item);
}
  • 知识点五:新建活动栈
   Intent target = new Intent(this, OutsideTaskActivity.class)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                          Intent.FLAG_ACTIVITY_TASK_ON_HOME);
        startActivity(target);
  • 知识点六:隐式调用活动

    Intent mIntent = new Intent(Intent.ACTION_VIEW)
            .setType("application/x-example")
            .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
    startActivity(mIntent);
    

对应AndroidManifest.xml:

<!-- 活动3 -->
        <activity
            android:name=".ContentViewActivity"
            android:label="ContentViewActivity"
            android:parentActivityName=".ContentCategoryActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="application/x-example"/>
            </intent-filter>
        </activity>
  • 知识点七:建立通知
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
                /*状态栏信息*/
                .setTicker("Direct Notification")
                /*小图标*/
                .setSmallIcon(android.R.drawable.stat_notify_chat)
                /*标题*/
                .setContentTitle("Direct Notification")
                /*内容*/
                .setContentText("This will open the content viewer")
                /*自动消失*/
                .setAutoCancel(true)
                /*设置intent*/
                .setContentIntent(
                /*添加到父亲栈*/
                TaskStackBuilder.create(this).addParentStack(ContentViewActivity.class)
                .addNextIntent(new Intent(this, ContentViewActivity.class)
                .putExtra(ContentViewActivity.EXTRA_TEXT, "From Notification"))
                 .getPendingIntent(0, 0));
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify("direct_tag", R.id.direct_notification, mBuilder.build());

注意:对话框活动主题必须声明为Dialog
<style name="Theme.Dialog" parent="@android:style/Theme.Dialog"/>

项目总结:
  1. 难度系数:3星

  2. 主要难点

            同一个活动栈中的导航  
            不同活动栈中的导航  
            对话框活动的使用
    

官方资料:

https://developer.android.com/training/implementing-navigation/ancestral.html

简明、完整、全面的安卓开发demo集合,包含如下示例 1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、ToggleButton 动态布局效果 9、AnalogClock 、 DigitalClock and Chronometer 时钟和数字日期 10、AutoCompleteTextView 根据输入自动补充可能的全部 11、Spinner View 选择框(弹出框形式选择) 12、DatePicker TimePicker View 日期时间选择器 13、ProgressBar View 普通进度条、显示在标题栏上的进度条 14、RatingBar View 评级 15、 SeekBar 拖动条,音量调节效果 16、ScrollView 、HorizontalScrollView 垂直和水平滚动条 17、ScrollView 、HorizontalScrollView 垂直和水平滚动条 18、ExpandableListView 分组可展开收缩的ListView 19、Notification 状态栏通知 20、GridView、ImageSwitcher 21、SmsManager 消息管理器,发短信(这里是模拟器只能给其它模拟器发短信) 22、Intent Action、Category属性 测试 23、系统 Action、Category属性 24、ClipDrawable 徐徐展开的风景 25、AnimationDrawable 会动的图片 26、Menu、SubMenu、ContextMenu xml配置menu 27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据存取 32、SQLiteDatabase 安卓客户端的嵌入式数据库 33、GestureDetector + ViewFlipper实现翻页效果 34、GestureLiberay 自定义手势 35、GestureLiberay 通过自定义的手势实现用户操作 36、TextToSpeech 语音朗读 37、ContentProvider、ContentResolver 应用之间共享数据 38、 Service 相当于没有界面的activity 39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯 45、下载状态栏显示下载进度 46、Gallery3d效果 47、ListView 上拉加载更多效果 48、异步加载图片的二级缓存技术 49、QQ的好友列表展示效果 50、Fragment + ViewPager实现tab滑动切换 51、能够显示在桌面前面的的歌词效果 52、activity切换特效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值