android_androidstudio - CSDN
android 订阅
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 [1] 展开全文
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 [1]
信息
更新时间
2019年9月4日 [2]
源码模式
自由及开放源代码软件
发行日期
2008年9月23日
软件许可
Apache License、 GPL等
创始人
安迪·鲁宾(Andy Rubin)
软件语言
C/C++(底层) Java,Kotlin等(应用层)
开发商
Google、开放手持设备联盟
发行商
Google - 谷歌(美国)
软件版本
Android 10(正式版) [2]
软件平台
Google
内核类型
宏内核(Linux内核)
测试版本
Android 11 Developer Preview 3(开发者预览版)
系统家族
类Unix,Linux
软件名称
Android(安卓)
Android系统简介
Android一词的本义指“机器人”,同时也是Google于2007年11月5日 Android logo相关图片(33张) 宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。(Android logo 相关图片相册图片来源:)
收起全文
  • 这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 ...
  • Android Studio 开发详解

    2019-12-18 15:09:34
    Android Studio教程,该教材会详细介绍Android Studio如何使用,包括在Windows平台下载安装Android Studio、配置、代码重构、项目调试、jar包管理等。
  • 本课程向大家讲述Android中的四大组件之一ContentProvider(内容提供者)
  • Android编程经典200例

    2020-07-30 23:33:19
    资源名称:Android编程经典200例内容简介:本书通过200个经典实例全面、系统地介绍了Android平台下的软件开发知识,重点突出、涉及面广、实用性强,在实例的讲解过程中还详细分析了开发思路及侧重点,使读者达到...
  • 一、Android简介

    2018-08-14 21:15:22
     从接触Android学习到开发马上就有3年了,讲道理是不是也该算是一个熟练的码农了(啥时候能成大牛啊),但是你问我Android都有哪些技术啊,开发过程中都有什么难点啊,好吧,我还真的不知道从何讲起,所以下定了...

    引言:

            从接触Android学习到开发马上就有3年了,讲道理是不是也该算是一个熟练的码农了(啥时候能成大牛啊),但是你问我Android都有哪些技术啊,开发过程中都有什么难点啊,好吧,我还真的不知道从何讲起,所以下定了决心,准备像各路大牛学习,坚持写博客,整理记录自己的脑子里的知识。都说写博客特别耗费时间,但是时间嘛就像女人的胸,挤挤总是会有的(坏笑)。好,不多多逼逼,下面开始...

    一、Android系统简介

    Android系统:Google公司发布的手机或者平板上的运行系统,现在最新(180814)的系统更新到了9.0吧,世界上4.03之前的系统应该没人再用了,在Android创建新项目的时候,最低版本选择4.03的时候,它就告诉我,这个选项已经含括了世界上100%的终端设备。每次大的升级都有很多新特性,接下来简单记录一下:

    1、Android 5.0

    (1)5.0之前Android系统都是运行在Dalvik虚拟机上,5.0之后运行环境是ART虚拟机,提升了运行速度。

    (2)提出Material Design设计风格来美化界面设计

      (3) .......

    2、Android 6.0

    (1)运行时权限管理

    (2)电量优化

    (3)规范化APP Link

    (4).......

    3、Android 7.0

    (1)新的Notifycations

    (2)多窗体支持(分屏模式)

    (3)随时随地低耗电

    (4)优化大型应用的安装速度

    (5)......

    4、Android 8.0

    (1)TensorFlow Lite 人工智能的尝试

    (2)画中画,在你使用的程序中可以小窗使用其他程序

    (3) Notifycations Dots 应用程序图标上出现通知小点提示,长按可查看

    (4)Play Console Dashboard 开发人员工具(还没用过,准备看看)

    (5)自定义字体终于支持了

    (6)....

    5、Android 9.0

    (1)室内wifi定位

    (2)刘海平的支持(好吧,我一直觉得很丑)

    (3)Notifycation (每个版本你都改)

    (4)通道设置,广播以及免打扰

    (5)多相机支持

    (6)新的图片解码,动画优化

    (7)....

    Android版本基本上是一年一个,哎,感觉做一个Android程序猿好累啊,每天都要学习新东西,不然很容易就被谷歌抛弃了,5.0之前的技术我就不建议大家去看了,感觉5.0以上机型基本都是最低国人配置了。好吧东西很多,写到这里发现自己要学习的东西还很多,接下来再介绍一下Android的系统架构...

    二、Android系统架构

    Android系统分为四层架构

    1、Linux内核层

        Android系统是基于Linux内核的,Android系统提供硬件的驱动,音频驱动,视频驱动,蓝牙,wifi驱动等等吧。(一般作为android应用开发,没必要学习这些东西)

    2、系统运行库层

    C/C++ 为Android提供解决一些Java代码干不好的事,比如OpenGL/ES 3D绘图,WebKit提供了浏览器内核的支持。(这个作为android开发的我们来说还是很值得学习)

    3、应用框架层

    提供Android构建程序所需要的API,我感觉就是SDK

    4、应用层

    安装在你手机上的应用程序就是组成这一层的东西了

    今天就写这么多了,我呢是被我的学长带入的Android之路(坑),当时他就和我说,Android学起来不是很难,就是学习面比较杂,要学的东西很多,现在想起来,真的是。。。放屁,要学的东西那叫超级多好么,而且我怎么没感觉到简单呢。。。

    展开全文
  • Android 实现倒影

    2010-05-27 14:15:00
    实现倒影可以使用 OpenGL 等 3D 接口方法,也可以用 2D 的方法模拟。用 2D 方法实现倒影需要从两个方面考虑:倒影是上、下翻转的图像;从上到下透明度越来越大。图像翻转的实现原理上讲,图像的翻转实际就是将图像...

    实现倒影可以使用 OpenGL 等 3D 接口方法,也可以用 2D 的方法模拟。

    用 2D 方法实现倒影需要从两个方面考虑:

    1. 倒影是上、下翻转的图像;
    2. 从上到下透明度越来越大。

    图像翻转的实现

    原理上讲,图像的翻转实际就是将图像数据上下行互换。

    Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

    for (int y = 0; y < h; y++){
    bm.setPixels(srcPix, y * w, w, 0, h - y - 1, w, 1);
    }

    透明度渐变

    实现透明度渐变有两种方法,一是使用蒙板;二是直接修改像素数据,修改每个 像素的 alpha 值。

    对于蒙板法,事先做好一张透明度渐变的图,这就是我们的蒙板,在绘制完图像 之后把蒙板图片绘制上去,这样就产生了透明度渐变的效果。

    对于第二种方法,我们需要首先读出图片的数据,然后修改每个像素的 alpha 值。下面的代码片段的功能是逐行增加 alpha 值,产生的效果是自上向下由暗 变亮。

    int alpha = 0x00000000;

    mBitmap.getPixels (pix, 0, w, 0, 0, w, h);

    for (int y = 0; y<h; y++) {
    for (int x=0; x<w; x++) {
    int index = y * w + x;
    int r = (pix[index] >> 16) & 0xff;
    int g = (pix[index] >> 8) & 0xff;
    int b = pix[index] & 0xff;

    pix[index] = alpha | (r<<16) | (g<<8) | b;
    }
    alpha = alpha + 0x01000000;

    }

    svn checkout http://androidslideshow.googlecode.com/svn/trunk/ androidslideshow-read-only
    展开全文
  • android:theme="@android:style/Theme.Translucent" 即可,这种方式只改变背景的颜色,对其他控件没有影响。但是它只能把背景设置为完全透明。如果要设置为半透明或者要设置透明的程度无法实现。 方法二...

    方法一:这种方法比较简单,只有一个步骤,只需要在配置文件中把需要设置为透明的activity的样式设置为

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

    即可,这种方式只改变背景的颜色,对其他控件没有影响。但是它只能把背景设置为完全透明。如果要设置为半透明或者要设置透明的程度无法实现。


    方法二:这种方法也比较简单,只需要在方法一的基础上,再布局文件中配置背景颜色就可以

           

    [html] view plaincopy
    1. android:background="#01000000"  

            “ #01000000”中“01”表示的是北京透明的程度,这个值只能设置01及以上的值,不能设置为00,及不能设置为完全透明,不过设置为01其实和透明的效果也很接近了,肉眼几乎看不出来区别了。这种方法同样对其他控件没有影响。


    方法三:这种方法稍微复杂些,有几个步骤,这种方法对其他控件的透明度也会产生影响,并且可以自己设置透明的程度,相对来说要灵活一些。

    第一步,在res/values下建立colors.xml文件,设置一个背景颜色,在这里可以设置你背景的颜色和透明度。

          添加上自定义的颜色

         

    [html] view plaincopy
    1. <color name="transparent">#55ff</color>  

    第二步,在res/values/下建styles.xml,设置程序的风格

    [html] view plaincopy
    1. <style name="Transparent">  
    2.         <item name="android:windowBackground">@color/transparent</item>  
    3.         <item name="android:windowIsTranslucent">true</item>  
    4.         <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>  
    5.     </style>  

    第三步,把这个styles.xml用在相应的Activity上。即在AndroidManifest.xml中的任意<activity>标签中添加

    [html] view plaincopy
    1. android:theme="@style/Transparent"  
    2. 如果想设置所有的activity都使用这个风格,可以把这句标签语句添加在<application>中。  
    3. 这个方法不仅对背景透明有效,而且对其他控件也有效,如果其他控件没有设置背景颜色,会呈现出透明的效果。这种方法比较复杂些,如果不是需要对整个页面及控件都有透明度要求,建议使用前面2中方法。  
    展开全文
  • 点此进入:从零快速构建APP系列目录导图点此进入:UI编程系列目录导图点此进入:四大组件系列目录导图点此进入:数据网络和线程系列目录导图一、横竖屏切换与状态保存的问题前面的文章说到了App横竖屏切换的时候会...

    点此进入:从零快速构建APP系列目录导图
    点此进入:UI编程系列目录导图
    点此进入:四大组件系列目录导图
    点此进入:数据网络和线程系列目录导图

    一、横竖屏切换与状态保存的问题

    前面的文章说到了App横竖屏切换的时候会销毁当前的Activity然后重新创建一个,我们可以自行在生命周期的每个方法里都添加打印Log的语句,以此来进行判断。又或者设一个按钮一个TextView点击按钮后,修改TextView 文本,然后横竖屏切换,这时我们就会发现TextView文本变回之前的内容了。

    总之,横竖屏切换时Activity走下述生命周期:onPause-> onStop-> onDestory-> onCreate->onStart->onResume。也就是说Activity销毁后又重新建立了一个,下面我们说一下关于横竖屏切换可能遇到的问题以及解决方法。

    1、禁止屏幕横竖屏自动切换

    解决方法很简单,我们在AndroidManifest.xml中为Act添加一个android:screenOrientation属性就可以了。

    android:screenOrientation有下述可选值:
    • unspecified:默认值,由系统来判断显示方向,判定的策略是和设备相关的,所以不同的设备会有不同的显示方向。
    • landscape:横屏显示(宽比高要长)。
    • portrait:竖屏显示(高比宽要长)。
    • user:用户当前首选的方向。
    • behind:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)。
    • sensor:由物理的感应器来决定,如果用户旋转设备这屏幕会横竖屏切换。
    • nosensor:忽略物理感应器,这样就不会随着用户旋转设备而更改了(”unspecified”设置除外)。

    2、横竖屏时想加载不同的布局

    (1)方法一:准备两套不同的布局

    Android会自己根据横竖屏加载不同布局,方法是创建两个布局文件夹:layout-land横屏、layout-port竖屏,然后把这两套布局文件丢这两文件夹里,文件名一样,Android就会自行判断,然后加载相应布局了!

    (1)方法二:自己在代码中进行判断

    这样的话我们就能自己想加载什么就加载什么,我们一般是在onCreate()方法中加载布局文件的,我们可以在这里对横竖屏的状态做下判断,关键代码如下:

    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){  
         setContentView(R.layout.横屏);
    }  
    
    else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {  
        setContentView(R.layout.竖屏);
    }

    3、状态保存问题

    这个其实我们之前说过了,通过一个Bundle savedInstanceState参数即可完成,三个核心方法是:

    onCreate(Bundle savedInstanceState);
    onSaveInstanceState(Bundle outState);
    onRestoreInstanceState(Bundle savedInstanceState);

    然后重写onSaveInstanceState()方法,往这个bundle中写入数据,比如:

    outState.putInt("num",1);

    然后你在onCreate或者onRestoreInstanceState中就可以拿出里面存储的数据,不过拿之前要判断下是否为null:

    savedInstanceState.getInt("num");

    二、知晓当前是哪个Activity

    这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪一个Activity。可能你会觉得挺纳闷的,我自己写的代码怎么会不知道这是哪一个Activity呢?很不幸的是,在你真正进入到企业之后,更有可能的是接手一份别人写的代码,因为你刚进公司就正好有一个新项目启动的概率并不高。阅读别人的代码时有一个很头疼的问题,就是你需要在某个界面上修改一些非常简单的东西,但是你半天找不到这个界面对应的活动是哪一个。学会了本节的技巧之后,这对你来说就再也不是难题了。

    首先需要新建一个 BaseActivity 继承自Activity,然后在 BaseActivity 中重写 onCreate()方法,如下所示:

    public class BaseActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, getClass().getSimpleName());
        }
    }

    这样我们就在 onCreate() 方法中获取了当前实例的类名,并通过 Log 打印了出来。

    接下来我们需要让 BaseActivity 成为工程项目中所有具有共同属性的Activity的父类,这样虽然项目中的Activity不再直接继承自 Activity 了,但是它们仍然完全继承了 Activity 中的所有特性,并且加入了我们最新的功能。

    三、随时随地完全退出App以及退出指定Activity的方法

    1、完全退出App

    (1)完全退出Activity

    有时我们可能会打开了很多个Activity,突然来个这样的需求,在某个页面可以关掉所有的Activity并退出程序。别以为这不会是真的,比如如果目前你手机的界面还停留在 SecondActivity,你会发现当前想退出程序是非常不方便的,需要连按两次 Back 键才行。有可能你会说:按Home键就行了呀。但是按 Home 键只是把程序挂起,并没有退出程序。所以这个问题就足以引起我们的思考,如果我们的程序需要一个注销或者退出的功能该怎么办呢?必须要有一个随时随地都能退出程序的方案才行。

    好吧,下面提供一个关闭所有Activity的方法, 就是用一个list集合来管理所有Activity,然后就方便后续的退出操作了。

    新建一个 ActivityCollector 类作为活动管理器,代码如下所示:
    public class ActivityCollector {
        public static List<Activity> activities = new ArrayList<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();
                }
            }
        }
    }

    在Activity管理器中,我们通过一个 List 来暂存Activity,然后提供了一个 addActivity() 方法用
    于向 List 中添加一个Activity,提供了一个 removeActivity() 方法用于从 List 中移除Activity,最后提供了一个 finishAll() 方法用于将 List 中存储的Activity全部都销毁掉,这样我们就可以轻松实现我们想要的功能了,比如我们可以这么使用:

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("BaseActivity", getClass().getSimpleName());
            ActivityCollector.addActivity(this);
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityCollector.removeActivity(this);
        }

    在 onCreate() 方法中调用了 ActivityCollector 的 addActivity()方法,表明将当前正在创建的Activity添加到活动管理器里。然后在 onDestroy() 方法中调用了 ActivityCollector 的 removeActivity() 方法,表明将一个马上要销毁的Activity从活动管理器里移除。

    从此以后,不管我么想在什么地方退出程序,只需要调用 ActivityCollector.finishAll() 方法就可以了。

    (2)杀死整个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) {}
        }

    2、退出指定Activity的方法

    首先,我们提供一种使用命令行查看当前所有Activity的命令

    使用下述命令即可,前提是你为SDK配置了环境变量:

    adb shell dumpsys activity

    其次,我们可以用这个Activity管理类来更精确的管理Activity:

    public class AppManager {
        private static Stack<Activity> activityStack;
        private static AppManager instance;
        private AppManager(){}
        /**
         * 单一实例
         */
        public static AppManager getAppManager(){
            if(instance==null){
                instance=new AppManager();
            }
            return instance;
        }
        /**
         * 添加Activity到堆栈
         */
        public void addActivity(Activity activity){
            if(activityStack==null){
                activityStack=new Stack<Activity>();
            }
            activityStack.add(activity);
        }
        /**
         * 获取当前Activity(堆栈中最后一个压入的)
         */
        public Activity currentActivity(){
            Activity activity=activityStack.lastElement();
            return activity;
        }
        /**
         * 结束当前Activity(堆栈中最后一个压入的)
         */
        public void finishActivity(){
            Activity activity=activityStack.lastElement();
            finishActivity(activity);
        }
        /**
         * 结束指定的Activity
         */
        public void finishActivity(Activity activity){
            if(activity!=null){
                activityStack.remove(activity);
                activity.finish();
                activity=null;
            }
        }
        /**
         * 结束指定类名的Activity
         */
        public void finishActivity(Class<?> cls){
            for (Activity activity : activityStack) {
                if(activity.getClass().equals(cls) ){
                    finishActivity(activity);
                }
            }
        }
        /**
         * 结束所有Activity
         */
        public void finishAllActivity(){
            for (int i = 0, size = activityStack.size(); i < size; i++){
                if (null != activityStack.get(i)){
                    activityStack.get(i).finish();
                }
            }
            activityStack.clear();
        }
        /**
         * 退出应用程序
         */
        public void AppExit(Context context) {
            try {
                finishAllActivity();
                ActivityManager activityMgr=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
                activityMgr.restartPackage(context.getPackageName());
                System.exit(0);
            } catch (Exception e) { }
        }
    }

    四、双击退出程序的两种方法

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

    五、启动Activity的最佳写法

    启动Activity的方法相信你已经非常熟悉了,首先通过 Intent 构建出当前的“意图”,然后调用 startActivity() 或 startActivityForResult() 方法将Activity启动起来,如果有数据需要从一个Activity传递到另一个Activity,也可以借助 Intent 来完成。

    假设 SecondActivity 中需要用到两个非常重要的字符串参数,在启动 SecondActivity 的时候必须要传递过来,那么我们很容易会写出如下代码:

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("param1", "data1");
    intent.putExtra("param2", "data2");
    startActivity(intent);

    这样写是完全正确的,不管是从语法上还是规范上,只是在真正的项目开发中经常会有对接的问题出现。比如 SecondActivity 并不是由你开发的,但现在你负责的部分需要有启动 SecondActivity 这个功能,而你却不清楚启动这个Activity需要传递哪些数据。这时无非就有两种办法,一个是你自己去阅读 SecondActivity 中的代码,二是询问负责编写 SecondActivity 的同事,但这样你会不会觉得很麻烦呢?其实只需要换一种写法,就可以轻松解决掉上面的窘境。

    修改 SecondActivity 中的代码,如下所示:
        public class SecondActivity extends BaseActivity {
            public static void actionStart(Context context, String data1, String data2) {
                Intent intent = new Intent(context, SecondActivity.class);
                intent.putExtra("param1", data1);
                intent.putExtra("param2", data2);
                context.startActivity(intent);
            }
        }

    我们在 SecondActivity 中添加了一个 actionStart() 方法,在这个方法中完成了 Intent 的构建,另外所有 SecondActivity 中需要的数据都是通过 actionStart() 方法的参数传递过来的,然后把它们存储到 Intent 中,最后调用 startActivity()方法启动 SecondActivity。

    这样写的好处在哪里呢?最重要的一点就是一目了然, SecondActivity 所需要的数据全部都在方法参数中体现出来了,这样即使不用阅读 SecondActivity 中的代码,或者询问负责编写 SecondActivity 的同事,你也可以非常清晰地知道启动 SecondActivity 需要传递哪些数据。另外,这样写还简化了启动活动的代码,现在只需要一行代码就可以启动 SecondActivity,如下所示:

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SecondActivity.actionStart(MainActivity.this, "data1", "data2");
            }
        });

    养成一个良好的习惯, 给你编写的每个Activity都添加类似的启动方法,这样不仅可以让启动Activity变得非常简单,还可以节省不少你同事过来询问你的时间。

    六、Activity全屏与对话框风格的实现

    (1)Activity全屏风格的实现

    1、代码隐藏ActionBar

    在Activity的onCreate方法中调用getActionBar.hide();,以此隐藏ActionBar。

    2、通过requestWindowFeature设置

    在代码中调用requestWindowFeature(Window.FEATURE_NO_TITLE); ,不过该代码需要在setContentView ()之前调用,不然会报错。

    不过有的时候这种方法并不能奏效,解决方法有两种:

    (1)将AppCompatActivity改为Activity,此时 requestWindowFeature(Window.FEATURE_NO_TITLE);是有效的。
    (2)在onCreate()方法中加入如下代码:

    if (getSupportActionBar() != null){
       getSupportActionBar().hide();
    }
    3、通过AndroidManifest.xml的theme设置

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

    (2)Activity对话框风格的实现

    在某些情况下,我们可能需要将Activity设置成对话框风格的,Activity一般是占满全屏的, 而Dialog则是占据部分屏幕的,实现起来也很简单。

    1、直接设置下Activity的theme
    android:theme="@android:style/Theme.Dialog"
    2、设置标题和小图标
    // 设置左上角小图标
    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设置过场动画:

    所谓的过场动画就是切换到另外的Activity时加上一些切换动画,比如淡入淡出,放大缩小,左右互推等。当然,我们并不在这里详细讲解动画,后面我们会有专门的篇幅来讲解这个,这里只教大家如何去加载动画,另外给大家提供了一些比较常用的过渡动画,只要将相关动画文件添加到res/anim目录下,然后下述方法二选一 就可以实现Activity的切换动画了。

    方法一:

    Activity A 跳转到 Activity B,在startActivity(intent)后面加上overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
    Activity B 跳转到 Activity A,要在finish()后面加上overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
    其中,anim_in是进入Activity的动画,而anim_out是退出Activity的动画。

    方法二:

    通过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>
    其中的四个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" >

    好的,Activity过场动画就这样设置好了。

    八、为Activity设置透明背景

    方法一:

    这种方法比较简单,只有一个步骤,只需要在配置文件中把需要设置为透明的Activity的样式设置为:

    Android:theme="@android:style/Theme.Translucent"

    即可,这种方式只改变背景的颜色,对其他控件没有影响,但是它只能把背景设置为完全透明,如果要设置为半透明或者要设置透明的程度无法实现。

    方法二:

    这种方法也比较简单,只需要在方法一的基础上,再布局文件中配置背景颜色就可以:

    android:background="#01000000"  

    “#01000000”中的“01”表示的是背景透明的程度,这个值只能设置01及以上的值,不能设置为00,及不能设置为完全透明,不过设置为01其实和透明的效果也很接近了,肉眼几乎看不出来区别了,这种方法同样对其他控件没有影响。

    方法三

    这种方法稍微复杂些,有几个步骤,这种方法对其他控件的透明度也会产生影响,并且可以自己设置透明的程度,相对来说要灵活一些。
    - 第一步
    在res/values下建立colors.xml文件,设置一个背景颜色,在这里可以设置你背景的颜色和透明度。

    <color name="transparent">#55ff</color>  
    • 第二步
      在res/values/下建styles.xml,设置程序的风格
    <style name="Transparent">  
            <item name="android:windowBackground">@color/transparent</item>  
            <item name="android:windowIsTranslucent">true</item>  
            <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>  
    </style>  
    • 第三步
      把这个styles.xml用在相应的Activity上,即在AndroidManifest.xml中的任意标签中添加:
    android:theme="@style/Transparent"  

    如果想设置所有的activity都使用这个风格,可以把这句标签语句添加在中。
      
    这个方法不仅对背景透明有效,而且对其他控件也有效,如果其他控件没有设置背景颜色,会呈现出透明的效果。这种方法比较复杂些,如果不是需要对整个页面及控件都有透明度要求,建议使用前面两种方法。 

    点此进入:GitHub开源项目“爱阅”。“爱阅”专注于收集优质的文章、站点、教程,与大家共分享。下面是“爱阅”的效果图:


    联系方式:

    简书:WillFlow
    CSDN:WillFlow
    微信公众号:WillFlow

    微信公众号:WillFlow

    展开全文
  • 代码地址:... 上次文章说如果图片数量比较大,可以使用jni实现,今天就来讲一下如何用jni实现线性透明效果,上篇文章 ... 一、其实实现原理与java版差不多 这里使用 jintArray 把图片的所有像素...
  • Android技术迭代更新很快,各种新出的技术和名词也是层出不穷。不知从什么时候开始,总是会时不时听到AndroidX这个名词,这难道又是什么新出技术吗?相信有很多朋友也会存在这样的疑惑,那么今天我就来写一篇科普...
  • AndroidX了解一下

    2019-10-14 17:16:46
    1.前言 我选取了几个常用依赖库,我们可以看看变化: Old build artifact AndroidX build artifact ... com.android.support:support-compat ... com.android.support:appcompat-v7 ... androidx.appco...
  • 如果能在Android中使用离线的谷歌地图将是一件很爽的事情!按照如下步骤做吧!体验一下高潮来临的快感吧!哈哈!以下操作在windows下进行!安裝 Java 執行環境 (JRE 或 JDK,至少為 JRE v1.6.0_14 或更高版本)。...
  • android studio的安装,史上最详细!!欢迎前来观看,感觉有用就点波关注吧!custom 欢迎前来观看,感觉有用就点波关注吧! 1、首先下载Android studio安装包,可以从 http://www.android-studio.org/ 下载最新...
  • 脱离 IDE 开发 Android app。
  • Android简介及发展历程

    2020-07-30 19:43:50
    简介 Android是基于Linux系统的开源操作系统,是由Andy Rubin于2003年在美国加州创建,后被Google于2005年收购。在2008年的时候发布了第一部Android智能手机,随后Android不断发展更新,占据了全球大部分的手机市场...
  • Android简介

    2011-07-15 09:42:16
    Android简介一、用户角度 user’s perspectiveAndroid是一个操作系统,就像Windows一样,为用户和手机之间架起一道桥梁,协调和管理手机资源,让用户更方便的使用和控制手机硬件,如网络连接设备(Wifi, GPRS),...
  • 写这篇文章,是为了让萌新们快速入门Android开发,同时讲述一下我对Android的理解,以及未来学习Android的规划,希望能够对大家有点参考价值。 Android是什么? Android就是跟苹果IOS一样,是一个操作系统。我们...
  • Android(一)-Android简介

    2012-10-29 15:10:19
    Android简介:  Android是基于Linux平台用Java语言开发的一种开放源代码的手机操作系统。  Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台...
  • ANDROID 一个开源的手机联盟项目 什么是ANDROIDANDROID是一个专用于移动设备的软件系统,它包括操作系统,中间件和关键应用,初略了解一下Android SDK提供必要的工具和API在Android平台上使用Java语言来开发应用
  • jdb 调试android 简介

    2017-08-11 14:34:03
    jdb 包含在jdk,使用jdb 之前需要先配置jdk的环境变量。 jdb 常用于三方apk 无源码动态调试,与其配合的工具为 baksmali、apkanalyser, 通过apkanalyser打印堆栈,理清楚正常情况下的代码流程。...
1 2 3 4 5 ... 20
收藏数 87,642
精华内容 35,056
关键字:

android