安卓 Activity

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);

// manifest节点设置

android:theme=" @android:style/Theme.NoTitleBar.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);

        }

 

隐藏导航栏

// 1.方式1

/**

     *

     * @param activity

     * @param

     */

    public static void setNavigationBar(Activity activity,int visible){

        View decorView = activity.getWindow().getDecorView();

        //显示NavigationBar

        if (View.GONE == visible){

            int option = SYSTEM_UI_FLAG_HIDE_NAVIGATION;

            decorView.setSystemUiVisibility(option);

        }

    }

 

REF:

    Android沉浸式状态栏与隐藏导航栏 很全

 

 

 

Q2.Activity设置屏幕常亮

设置方法

// 1.方式1

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

 

REF:

    Android保持屏幕常亮的方法

 

 

Q3.Activity主题设置

s1.Android5.0+主题颜色定义

colorPrimaryDark 状态栏颜色

colorPrimary 标题栏颜色

colorAccent radioButton等背景色

// <style name="ColorTheme" parent="Theme.AppCompat.Light.DarkActionBar">

        <!-- toolbar color -->

        <item name="colorPrimary">@color/green</item>

        <!-- status bar color -->

        <item name="colorPrimaryDark">@color/red</item>

        <!-- edittext line color -->

        <item name="colorAccent">@color/blue</item>

// 兼容AIP19-20

    /**

     * Set status bar color

     */

    private void setStatusBarColor(){

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

            Window window = getWindow();

            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            ViewGroup decorViewGroup = (ViewGroup) window.getDecorView();

            View statusBarView = new View(window.getContext());

            int statusBarHeight = getStatusBarHeight(window.getContext());

            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, statusBarHeight);

            params.gravity = Gravity.TOP;

            statusBarView.setLayoutParams(params);

            int color = ContextCompat.getColor(this, R.color.colorPrimaryDark);

            statusBarView.setBackgroundColor(color);

            decorViewGroup.addView(statusBarView);

 

            ViewGroup mContentView = (ViewGroup) window.findViewById(Window.ID_ANDROID_CONTENT);

            View mChildView = mContentView.getChildAt(0);

            if (mChildView != null) {

                //注意不是设置 ContentView 的 FitsSystemWindows, 而是设置 ContentView 的第一个子 View .

                // 预留出系统 View 的空间.

                mChildView.setFitsSystemWindows(true);

            }

        }

    }

 

    /**

     * GET status bar height

     * @param context

     * @return

     */

    private static int getStatusBarHeight(Context context) {

        int statusBarHeight = 0;

        Resources res = context.getResources();

        int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");

        if (resourceId > 0) {

            statusBarHeight = res.getDimensionPixelSize(resourceId);

        }

        return statusBarHeight;

}

// 设置状态栏颜色-使用框架

compile 'com.githang:status-bar-compat:latest.integration'

StatusBarCompat.setStatusBarColor(this, color, lightStatusBar);

 

APP启动时黑屏或者白屏的解决办法

// 1.主题背景设置透明

<item name="android:windowBackground">@color/transparent_color</item>

// 2.主题背景设置为启动图片

 

 

REF:

    Android开发技巧——设置系统状态栏颜色

    Andriod中Style/Theme原理以及Activity界面文件选取过程浅析

 

 

Q4.PreferenceActivity

PreferenceActivityUI组件

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使用详解 简例

 

Q5.Activity 在最近项目列表中不可见

其他方法

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

android:excludeFromRecents="true"

 

REF:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值