zoukankan      html  css  js  c++  java
  • Android基础新手教程——4.1.2 Activity初窥门径

    Android基础新手教程——4.1.2 Activity初窥门径

    标签(空格分隔): Android基础新手教程


    本节引言:

    上一节中我们对Activity一些主要的概念进行了了解,什么是Activity。Activity的生命周期,怎样去启动一个Activity等,本节我们继续来学习Activity,前面也讲了一个App一般都是又多个Activity构成的,这就涉及到了多个Activity间数据传递的问题了。那么本节继续学习Activity的使用!

    另外关于传递集合。对象,数组,Bitmap的我们会在Intent那里进行解说,这里仅仅介绍怎样传递基本数据!


    1.Activity间的数据传递:

    代码演示样例:

    效果图:

    代码下载:ActivityTest1.zip


    2.多个Activity间的交互(后一个传回给前一个)

    代码演示样例:

    效果图:

    代码下载:ActivityTest2.zip


    3.知晓当前是哪个Activity


    4.随时关闭全部Activity

    有时我们可能会打开了非常多个Activity。突然来个这种需求,在某个页面能够关掉
    全部的Activity并退出程序!

    好吧。以下提供一个关闭全部Activity的方法,
    就是用一个list集合来存储全部Activity!

    具体代码例如以下:

    public class ActivityCollector {  
        public static LinkedList<Activity> activities = new LinkedList<Activity>();  
        public static void addActivity(Activity activity)  
        {  
            activities.add(activity);  
        }  
        public static void removeActivity(Activity activity)  
        {  
            activities.remove(activity);  
        }  
        public static void finishAll()  
        {  
            for(Activity activity:activities)  
            {  
                if(!activity.isFinishing())  
                {  
                    activity.finish();  
                }  
            }  
        }  
    }  

    5.全然退出App的方法

    上面说的是关闭全部Activity的,可是有些时候我们可能想杀死整个App。连后台任务都杀死
    杀得一干二净的话。能够使用搭配着下述代码使用:

    实现代码:

    /** 
     * 退出应用程序 
     */  
    public void AppExit(Context context) {  
        try {  
            ActivityCollector.finishAll();  
            ActivityManager activityMgr = (ActivityManager) context  
                    .getSystemService(Context.ACTIVITY_SERVICE);  
            activityMgr.killBackgroundProcesses(context.getPackageName());  
            System.exit(0);  
        } catch (Exception ignored) {}  
    }  

    6.双击退出程序的两种方法:

    1)定义一个变量,来标识是否退出

    // 定义一个变量,来标识是否退出
    private static boolean isExit = false;
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            isExit = false;
        }
    };
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (!isExit) {
                isExit = true;
                Toast.makeText(getApplicationContext(), "再按一次退出程序",
                        Toast.LENGTH_SHORT).show();
                // 利用handler延迟发送更改状态信息
                mHandler.sendEmptyMessageDelayed(0, 2000);
            } else {
                exit(this);
            }
            return false;
        }
    return super.onKeyDown(keyCode, event);}

    2)保存点击时间:

    //保存点击的时间
    private long exitTime = 0;
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if ((System.currentTimeMillis() - exitTime) > 2000) {
                Toast.makeText(getApplicationContext(), "再按一次退出程序",
                        Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {
                            exit();
                          }
            return false;
        }
            return super.onKeyDown(keyCode, event);
    }

    7.为Activity设置过场动画

    所谓的过场动画就是切换到另外的Activity时加上一些切换动画,比方淡入淡出。放大缩小,左右互推等!
    当然,我们并不在这里具体解说动画,后面有专门的章节来解说这个,这里仅仅教大家怎样去载入动画,另外
    给大家提供了一些比較经常使用的过渡动画,仅仅要将相关动画文件加入到res/anim文件夹下,然后下述方法二选一
    就能够实现Activity的切换动画了!

    1)方法一:

    2)方法二:

    通过style进行配置,这个是全局的哦,就是全部的Activity都会载入这个动画。

    实现代码例如以下:

    ①在style.xml中自己定义style:

    <!-- 默认Activity跳转动画 -->
    <style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/default_anim_in</item>
        <item name="android:activityOpenExitAnimation">@anim/anim_stay</item>
        <item name="android:activityCloseEnterAnimation">@anim/anim_stay</item>
        <item name="android:activityCloseExitAnimation">@anim/default_anim_out</item>
    </style>

    解释:

    4个item分别代表
    Activity A跳转到Activity B时Activity B进入动画;
    Activity A跳转到Activity B时Activity A退出动画;
    Activity B返回Activity A时Activity A的进入动画
    Activity B返回Activity A时ActivityB的退出动画

    ②然后改动下AppTheme:

    <style name="AppTheme" mce_bogus="1" parent="@android:style/Theme.Light">
            <item name="android:windowAnimationStyle">@style/default_animation</item>
            <item name="android:windowNoTitle">true</item>
    </style>

    ③最后在appliction设置下:

    <application
       android:icon="@drawable/logo"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >

    好的,动画特效就这样duang一声设置好了~

    3)其它

    好的,除了上面两种方法以外。还能够使用TransitionManager来实现。可是需求版本号是API 19以上的。
    另外另一种addOnPreDrawListener的转换动画,这个用起来还是有点麻烦的。可能不是适合刚開始学习的人
    这里也不讲,最后提供下一些经常使用的动画效果打包。选择须要的特效加入project就可以!


    Activity经常使用过渡动画.zip


    8.Bundle传递数据的限制

    在使用Bundle传递数据时,要注意,Bundle的大小是有限制的 < 0.5MB。假设大于这个值
    是会报TransactionTooLargeException异常的!。!


    9.使用命令行查看当前全部Activity的命令:

    使用下述命令就可以,前提是你为SDK配置了环境变量:adb shell dumpsys activity


    10.设置Activity全屏的方法:

    1)代码隐藏ActionBar

    在Activity的onCreate方法中调用getActionBar.hide();就可以
    谢群友匹诺曹提醒:
    使用兼容包后。都要用getSupportActionBar获取ActionBar

    2)通过requestWindowFeature设置

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    该代码须要在setContentView ()之前调用。不然会报错!

    3)通过AndroidManifest.xml的theme

    在须要全屏的Activity的标签内设置 theme = @android:style/Theme.NoTitleBar.FullScreen


    11.onWindowFocusChanged方法妙用:

    我们先来看下官方对这种方法的介绍:

    就是。当Activity得到或者失去焦点的时候。就会回调该方法!
    假设我们想监控Activity是否载入完成,就能够用到这种方法了~
    想深入了解的可移步到这篇文章:
    onWindowFocusChanged触发简单介绍


    12.定义对话框风格的Activity

    在某些情况下。我们可能须要将Activity设置成对话框风格的,Activity通常是占满全屏的,
    而Dialog则是占领部分屏幕的!实现起来也非常easy!

    直接设置下Activity的theme:

    android:theme="@android:style/Theme.Dialog"

    这样就能够了,当然你能够再设置下标题,小图标!

    //设置左上角小图标
    requestWindowFeature(Window.FEATURE_LEFT_ICON); 
    setContentView(R.layout.main); 
    getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_lion_icon);
    //设置文字:
    setTitle(R.string.actdialog_title);  //XML代码中设置:android:label="@string/activity_dialog"

    本节小结:

    好的,本节我们又学习了一下Activity在实际开发中的一些常见问题,相信在实际开发中会帮到大家的!
    下节我们来学习Activty的栈的概念,以及四种载入模式!敬请期待~谢谢~

  • 相关阅读:
    语法上的小trick
    [算法模版]斜率优化
    CF886E Maximum Element
    【hdu 1576】A/B(数论--拓展欧几里德 求逆元 模版题)
    【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
    【poj 2478】Farey Sequence(数论--欧拉函数 找规律求前缀和)
    【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}
    【poj 2407】Relatives(数论--欧拉函数 模版题)
    【bzoj 2038】 [2009国家集训队]小Z的袜子(算法效率--莫队分块算法 模版题)
    【uva 1312】Cricket Field(算法效率--技巧枚举)
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7275654.html
Copyright © 2011-2022 走看看