自学Android之Activity:(一)关于Activity

来源:互联网 发布:mac os启动盘制作 编辑:程序博客网 时间:2024/04/30 00:41

转载请注明出处:http://blog.csdn.net/cc_xz/article/details/60970944

前言:

这是文章的第一篇,我们将尝试…..好吧算了我不骗你了…这篇其实是某篇文章中的一部分,写着写着发现好多篇幅,只能单独拿出来了。里面有一些地方我没有去刻意改动,所以你可能会看到一些痕迹,不过知识上不会有任何问题。不过我觉得这样也挺好玩的,等我两年以后再回来看吧。哈哈!下面,开始!

在本章中,你将了解到:
1.初步了解Activity的代码。
2.使用Log在希望的地方输出日志。

当你创建好一个Activity之后:

我这里不演示如果创建一个Activity,相关的知识网上有很多。下面来看,当你创建好一个Activity后,你可以看到如下代码:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

如果你学习过Java,那么你肯定知道publc和class的意思,如果没有学习过,希望你可以先去学习Java,注意敲黑板了!因为:Android的技艺不在Android本身,在Java。
当然是我的错,前面并没有说明什么的Activity,不过现在你只需要知道,如果你希望用户看到并操作你的程序那么相关的代码必须直接或间接的写到Activity中。详细的后边会进行阐述。
首先我们来看一下MainActivity的父类,是一个叫AppCompatActivity的类,从名字上我们可以了解,这是一个关于APP兼容的Activity。要知道,如果你创建一个空类,那么它是无法完成Activity的工作的,所以我们通过继承AppCompatActivity,从而我们可以重写一些父类的方法,并且在方法中进行Activity的相关工作。注1;

继续往下看,发现一个叫onCreate的方法,通过名字我们可以发现这是一个用于创建的方法,具体的作用请参考第一篇文章。我们注意到,在这个方法之上有一个“@Override”字样的东西,通过名字可以知道,这是重写。这个东西是用于告诉看这段代码的人:我下面的这个方法,是这个类的父类的,需要在这个方法里写一些特定的代码,以完成父类当初在创建这个方法的时候希望你完成的任务。PS:(我以前可爱删这个了!)
这里写图片描述
可以看到onCreate中接收一个类型为Bundle的参数,还记得我上篇文章说的,可以把当前Activity的一些数据保存起来,就是通过这个类型为Bundle的参数,当前它能做的不仅于此,后面会专门用一篇来讲解。
继续看发现了super.onCreate(savedInstanceState);我想你可能猜到了,MainActivity的父类也有onCreate(),结合savedInstanceState的作用,我们知道,每次创建Activity的时候,都会把我们可能保存的一些数据交给父类中的onCreate()处理。
那么问题来了,是谁给我们自己的onCreate()传递的这个数据呢?这个Bundle里有什么呢?欲知此事如何,请看我那篇还没写出来的文章!
这里写图片描述
然后又发现了setContentView这个方法,并且这个方法还接受一个莫名其妙的参数,我们一点一点来看,首先是R,其实这个R表示Android(本项目)中所有的资源,也就是说,你通过R就可以找到所有的资源,目录、图片、音乐等等。而后面的layout就是一个目录,这个目录是专门放置布局文件的。
去看看你现在的模拟器中的程序显示了什么?是不是显示了一个”Hello World!”??PS:(不是HelloWorld的你走开!),有没有想过为什么会显示呢?没错,就是在你的布局文件中使用Xml写了一个HelloWorld。也就是说,你希望你的APP中显示什么内容,都需要在布局文件中去写。
那么既然setContentView的最终参数是一个布局文件,再结合它的名字,set是设置的意思,Content是内容,View是视图。结合起来可以理解为设置当前Activity的视图(没错我就是开了上帝视角)。注2;

这里写图片描述
四分之一的内容就用了这么长的篇幅,那么这篇文章可能很长,果然我的风格太啰嗦了……..
这里写图片描述
尝试使用Log:

首先在MainActivity这个类中添加一行代码:

    private String TAG = "来自于MainActivity";

这个String类型的变量中的内容可以自己定义,我喜欢的这种方式是可以在很多Log中看到是由哪个类中发送过来的,方便定位。而这个变量的名字为TAG,TAG是标签的意思,建议不要修改,这是一种约定成俗的方式。用来表示这个变量是用于打印Log的。
然后在到onCreate()中添加一行代码:

Log.e(TAG,"创建了一个Activity");

Log是一个static类型的类,顾名思义,这是用于打印日志用的,后面的.e是当前日志的打印级别为erroe,这属于很高的级别了。而它接受两个参数,一个是我们创建的变量,另外一个是一段字符串,现在运行一下程序,在LogCat中可以看到以下输出:
这里写图片描述
可以看到,输出了一行Log。而内容正是TAG变量和后面的字符串中的内容。一定要擅长使用Log,这在排错的时候很有帮助!注3;

文章中的注释们:
注1:
我想,如果你还看过其他关于Android的书,你可能会看到MainActivity的父类可能是一个叫“Activity”的类,那么继承自这两个类有什么区别呢?现在到你的Android Stuido中,使用Ctrl+H,可以看到它的继承信息,如下:
这里写图片描述
通过标红的地方可以看到,Activity类其实是AppCompatActivity的父父父父…类,我们暂且不管Activity的子类们和AppCompatActivity的父类们增加了哪些功能,但是从功能实现来讲,肯定是使用AppCompatActivity作为父类比较好,这也是目前Google官方提倡的。

注2:
你可以尝试按在下面的路径中去看看R文件中的内容,保证酸爽!不过值得注意的是,你需要先把当前包结构从默认的Android切换为Projcet模式,另外,是在你当前项目中,如果你没有在一个包(最上面的Demo1)中创建多个项目(里面的app、demo01、demo02、demo03都是子项目),那么就从app中查找,从build文件夹开始。
这里写图片描述
你可能发现R文件中所有的数据都是int类型的,那么这证明,Android中所有的路径都是通过int类型来表示,int类型可以存储什么?数字!想想如果没有R文件,让你通过一大串数字去查找资源的路径,是不是更酸爽?
这里写图片描述
注3:
好吧…你看到的内容肯定和图片上的不一样,是不是有很多很多很多行Log?没错,那些都是你目前不需要的,下面请根据图片与文字的对应尝试提取你感兴趣的Log。
这里写图片描述
Key:1=你可以在Run中看到Log,但是还是推荐在Android Monitor中去查看,这里有很强的过滤系统。
Key:2=如果你开了很多模拟器,那么可以在这里选择你希望查看哪个模拟器中产生的Log。(注意这里有时会产生缓存模拟器)
Key:3=你的一个模拟器一定没有只运行一个项目,点开你会发现有很多,这时你可以选择只看你当前项目发出的Log。例如我的这个项目叫Demo03。
Key:4=还记得前面说的日志等级么?在这里设置,对应我Log.e就是Error级的日志,如图所示就可以只看到Error级的日志,当然你也可以自行选择,但是千万要和你打印的Log等级对应。具体关于Log等级的内容网上也有很多…你知道的…我很啰嗦…真的不敢再多讲知识点了…..
Key:5=这里的选择比较有意思,是通过标签自定义你感兴趣的内容,而我这里显然自定义了一个。
这里写图片描述
通过标红的地方设置,并且要定义过滤的关键字..其他的..你自己探索一下嘛….

结尾:

通过这篇文章我又感觉到了自己的啰嗦,不过我这样写是因为我自己在自学的时候,有很多现在看来很低级的错误,网上大部分文章都没有说明,这样导致进度很慢,所以希望把知识内容写的更细致一些,对初学者更友好一些。这终究是二者不可兼得的东西。
这里写图片描述

0 0
原创粉丝点击