安卓 Activity总结

/*----------------------------------------
 *-描述--Activity相关内容总结.
 *-描述--S1.Activity的7个生命周期
 *  ☆☆☆☆☆单独活动生命周期:
 *  1.Activity创建的时候:onCreate() => onStart() => onResume()
 *  2.按下home键或进入其他活动(失去焦点):onPause() => onStop()
 *  3.再进入(重获取焦点):onRestart() => onStart() => onResume()
 *  4.退出:onPause() => onStop() => onDestroy()
 *  5.弹出对话框(失去焦点):没走生命周期?
 *  6.横竖屏切换:横 => 竖或反过来
 *      重走生命周期onPause() => onStop() => onDestroy() ... onResume()
 *  7.设置横竖屏却换不走生命周期:Activity注册列表中添加属性
 *      android:configChanges="keyboardHidden|orientation|screenSize"
 *  ☆☆☆☆活动的7个生命周期描述:
 *  -1. void onCreate(Bundle savedInstanceState) Activity被创建的时候
 *  -2. void onStart() activity变为在屏幕上对用户可见时调用。
 *  -3. void onResume() activity开始与用户交互时调用(无论是启动还是重新启动一个
 *      活动,该方法总是被调用的)。
 *  -4. void onPause() activity被暂停时调用,该方法用于保存活动状态的,也是保护现场,压栈等
 *  -5. void onStop() activity被停止并转为不可见阶段及后续的生命周期事件时调用。
 *  -6. void onRestart() 重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
 *  -7. void onDestroy()    activity被完全从系统内存中移除时调用,该方法被调用可能是
 *      因为有人直接调用onFinish()方法或者系统决定停止该活动以释放资源
 *  ☆其他相关方法
 *  -1.窗口焦点变化 onWindowFocusChanged(boolean hasFocus)
 *  -2.当系统资源不足而销毁活动时,会把View的状态信息保存到Bundle savedInstanceState
 *      重新创建时又把参数加载出来,可以用于屏幕方向旋转时数据保存等操作
 *      onCreate(Bundle savedInstanceState)
 *      onSaveInstanceState(Bundle outState)
 *      onRestoreInstanceState(Bundle savedInstanceState)
 *     参考:
 *      http://blog.csdn.net/shulianghan/article/details/38297083
 *      http://blog.sina.com.cn/s/blog_618199e60101g1k5.html
 *-描述--S2.传值与跳转
 *  ☆☆活动的注册:设置name的属性为包名+类名
 *  -1.<activity android:name=".basic.dir.basic1.ModxBasic1Activity"/>
 *  -2.label属性:值是Activity显示的标题 android:label="ModxBasic1Activity"
 *  ☆☆Activity的跳转:
 *  -1.从桌面图标到APP的跳转
 *      <intent-filter>
 *          <action android:name="android.intent.action.MAIN" />
 *          <category android:name="android.intent.category.LAUNCHER" />
 *      </intent-filter>
 * -2.显示意图 直接跳转到该APP的下一个活动
 *      Intent intent = new Intent(BActivity.this, CActivity.class);
 *      startActivity(intent);
 * -3.隐式意图 使用一个意图跳转到两个已经配置了该意图的应用
 *      Intent intent = new Intent("com.example.activity");
 *      startActivity(intent);
 *      !!需注册
 *          <intent-filter>
 *              <action android:name="com.example.activity" />
 *              <category android:name="android.intent.category.DEFAULT" />
 *          </intent-filter>
 *  ☆☆☆Activity的传值方式
 *  -1.在Intent 对象中,可以放入各种数据类型
 *      value值可以是基本数据类型及字符串、Bundle对象、实现Serializable接口或Parcelable接口的对象
 *      intent还封装了一些传送数组、ArrayList集合的方法
 *      intent.putExtra("key", value)
 *  -2.创建一个Bundle(数据包)对象,然后调用Bundle对象的put方法来来存入数据,
 *      最后把Bundle对象存入Intent中
 *      !!bundle对象可以理解成一个Map键值对
 *      bundle传送的数据类型与intent相同,但bundle封装了更多方法
 *  -3.startActivityForResult()传值是前后两个活动的数据交换
 *      A活动启动下一个活动并加上一个请求码,B收到请求码通过intent把数据回传,并结束B活动,
 *      完成数据的交互。使用相对局限、麻烦
 *      A startActivityForResult(intent,requestCode);
 *          onActivityResult(int requestCode, int resultCode, Intent data)
 *      B setResult(resultCode,intent) 返回数据
     *      finish()
 *  -4.使用全局对象Application
 *      1).MyApplication extends Application;
 *      2).<application android:name=".MyApplication" manifest设置属性
 *      3).getApplication获取Application对象,强转MyApplication,获取变量
 *          强转MyApplication.XXX
 *  -5.第三方封装工具eventBus
 *-描述--S3.扩展
 *  ☆☆☆活动与Fragment的生命周期:
 *  ☆☆☆活动与Service的生命周期:
 *  ☆☆☆活动的生命周期与View绘制方法:
 *-描述--S4.Activity的启动模式
 *  <!-- android:launchMode="singleTop" 处于栈顶时不重新创建  -->
 *  <!-- android:launchMode="singleInstance" 所在任务栈中,只有自己一个实例 -->
 *  <!-- android:launchMode="singleTask" 不重新创建,但会清除位于其上的任务 -->
 *  <!-- android:launchMode="standard" 每次跳转重新创建  -->
 *-描述--None.
 *-描述--B1.None.
 *---------------------------------------------------------------------------*/

Activity常用设置

Q1.设置Activity全屏/状态栏-导航栏透明

Activity全屏@link

/*set it to be no title*/

requestWindowFeature(Window.FEATURE_NO_TITLE);

/*set it to be full screen*/

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

状态栏-导航栏背景透明@link

        // 隐藏标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        View root = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
        // 或者 在界面的根层加入 android:fitsSystemWindows=”true”
        // 这个属性,这样就可以让内容界面从 状态栏 下方开始。
        ViewCompat.setFitsSystemWindows(root, true);
        setContentView(root);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            // Android 5.0 以上 全透明
            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            // 状态栏(以上几行代码必须,参考setStatusBarColor|setNavigationBarColor方法源码)
            window.setStatusBarColor(Color.TRANSPARENT);
            // 虚拟导航键
            window.setNavigationBarColor(Color.TRANSPARENT);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // Android 4.4 以上 半透明
            Window window = getWindow();
            // 状态栏
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 虚拟导航键
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
Q2.PreferenceActivity

PreferenceActivity UI组件


CheckBoxPreference


单选框


SwitchPreference


开关选项


EditTextPreference


文本输入框选项


RingtonePreference


铃声选项


ListPreference


列表框


MultiSelectListPreference


复选列表框


PreferenceCategory


组合框

基本属性与方法:

公有属性:
android:defaultValue="false" // 默认值
android:key="check_box_preference_1" // 相当于ID
android:title="Check box preference" // 标题
android:summary="aaa" // 概述
android:persistent="true" // 表示Preference元素所对应的值是否写入sharedPreferen文件中
android:dependency="check_box_preference_0" // 表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)
ListPreference/MultiSelectListPreference:
android:entries="@array/list_preference_entries" // 列表内容
android:entryValues="@array/list_preference_entries" // 列表内容对应值
事件:
// 设置改变事件
checkBoxPreference1.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                LogUtils.e(newValue.toString());
                return true;
            }
        });
// 基本方法
        listPreference1.setSummary("str");
        listPreference1.getSummary();
        listPreference1.setValue("");
        listPreference1.getValue();
        listPreference1.setEntries();
        listPreference1.getEntry();
        listPreference1.setEntryValues();
        listPreference1.getEntryValues();
        listPreference1.setTitle();
        listPreference1.getTitle();
        listPreference1.setIcon();
        listPreference1.getIcon();
// 点击事件
checkBoxPreference1.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                return true;
            }
        });

其他方法


// SharedPreferences设置变化

SharedPreferences.registerOnSharedPreferenceChangeListener(listener);

新API

版本高于Android 3.0(API 10),可以在普通的Activity中使用PreferenceFragment来显示,也可以使用PreferenceActivity。link

参考:

PreferenceActivity developer.android

Android之PreferenceActivity 基本使用

Android中Preference的使用以及监听事件分析 API分析

Android实战技巧之六:PreferenceActivity使用详解 简例

Q3. Activity manifest属性配置

其他方法


// 设置APP切换到后台在最近项目中不可见 link

android:excludeFromRecents="true"

时间: 2024-08-28 21:03:12

安卓 Activity总结的相关文章

安卓Activity跳转的几种方式

本文转载于http://blog.sina.com.cn/s/blog_5140274d0100q4j7.html,本人仅作为学习交流之用,请大家尊重原创. 第一种方式,用action来跳转. 1.使用Action跳转,如果有一个程序的 AndroidManifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent 就与这个目标Action匹配.如果这个IntentFilter段中没有定义 Type,Category,那么这个 A

安卓activity捕获返回button关闭应用的方法

安卓activity捕获返回button关闭应用的方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //按下键盘上返回button if(keyCode == KeyEvent.KEYCODE_BACK){ new AlertDialog.Builder(this) .setIcon(R.drawable.alert_dialog_icon) .setTitle("提示") .setMessage(

安卓Activity生命周期(转)

http://www.oschina.net/question/54100_27841 启动:onCreate()->onStart()->onResume 当从Activity界面直接按Back键,onPause()->onStop()->onDestory() 当从Activity界面按home键.onPause()->onStop(), 接着再进入Activity时onRestart()->onStart()->onResume() public class

安卓activity捕获返回按钮关闭应用的方法

安卓activity捕获返回按钮关闭应用的方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //按下键盘上返回按钮 if(keyCode == KeyEvent.KEYCODE_BACK){ new AlertDialog.Builder(this) .setIcon(R.drawable.alert_dialog_icon) .setTitle("提示") .setMessage("是否

安卓 Activity 给 popupwindow 传值

功能简单介绍:在Activity页面中点击某个按钮,弹出自定义popupwindow页面,同时将Activity中的电话号码字符串传递给popupwindow页面.再点击popupwindow页面中的按键直接跳转到安卓拨号页面,同时电话号码也在页面上. 声明:值传递其实用的是安卓的全局变量. 全局变量类中的代码如下: package com.cn.gordon.exhibition.walk.application; import android.app.Application; public

安卓activity切换动作--左右滑动的效果

一开始我给activity定义了切换动作,不知道为什么效果一直没出来,切换动作都是安卓默认的.后来问了问别人,改了改终于好了,为什么我也不知道.但是如果大家遇到activity切换的问题的话,可以直接套用我这个style样式,代码如下: 1.这是个style的文件: <style name="ThemeMain" parent="android:Theme"> <item name="android:windowFrame"&g

安卓activity生命周期

相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态. 4.当前

安卓activity之间互相通信的问题

============问题描述============ 大侠,如果我想在activity A中启动activity B,然后activity A还能向B发送状态信息,B再根据A发送来的状态决定自身的变化,比如A发送退出命令,B接收之后就finish,这样的想法能实现吗? 之所有有这样的需求是因为,比如在登录的时候,考虑到网络延迟的关系,在用户点按钮时,我想要出现一个loading的界面,覆盖在登录界面上面,然后当服务端返回成功,loading的那个界面就变成一个对号√的图片,失败就变成一个叉×

安卓Activity的学习过程和学习思路

1.onCreate, onStart, onResume, onPause, onStop, onRestart, onDestroy 如果连这7个方法都不清楚的话,那么就该从头开始看Android了.生命周期: 2.   onNewIntent 在AndroidManifest.xml将某activity的android: launchMode设置为singleTask或singleTop的情况下,当需要开启(startActivity)这个activity的时候,如果当前应用的Activi

安卓activity之间值共享解决办法,tabhost之间共享父类值

1.tabhost父类值共享的解决办法 dianzhanliebiao.java是传值页面,zhuyemian.java放的是tabhost,dianzhangaikuang.java是tabhost的具体子布局 首先dianzhanliebiao.java传值 intent.putExtra("id", “1234”);        intent.setClass(dianzhanliebiao.this, zhuyemian.class);        dianzhanlieb