初学安卓之概要

17年3月26日买了“第一行代码 第2版”的书本,这是我见过比较幽默的一本书,按照其学习了一小部分,第二天复习并多学了1章。今天又返回前面看过的章节反复查询与测试,并重新观看以尽量搞懂安卓的一个大概!

四大组件

安卓分为四大组件,分别是活动(Activity)、服务、广播接收器、内容提供器

正文

以Android Studio为例,首先新建了个项目,其目录结构最主要的是app这个文件夹,其他的多用于自动生成,由于初学暂且略过,书本中也有一部分介绍。
app目录展开后分为build,libs,src,test。其中有用的就是src目录,继续展开,可以看见java,res文件夹和一个AndroidManifest.xml文件。
包(Package)其实就是文件夹的意思了,每个点就代表下一级文件夹,package就放在java文件夹下, .java源码文件就放在package下。这里说的不太对,在安卓中还是习惯说“活动(Activity)”就放在java目录里的包里头。活动就是安卓四大组件之一。用.java格式的源码文件来编写安卓的活动页面;res目录继续展开,可以看到drawable,mipmap.mipmap-xxx,values等文件夹,其中drawable用于保存图片,layout用来存放布局文件(也就是xml文件),values用来存储字符串。
安卓讲究视图与逻辑分离的结构,所以,用xml来进行布局,其存放在layout目录下,可以通过@等方式引用其他id或者定义一些内容。
那么,之前所说的java文件夹下的源码文件,也就是Activity活动组建之一,在活动中就通过setContentView(R.layout.xxxx)来引入布局文件,xxxx为布局文件xml的文件名字不包含后缀。
假如引入的布局文件为hello_world_layout,那么打开hello_world_layout.xml查看一些布局文件的信息如下:

android:id="@+id/hello_world_layout"   //给xml定义一个id_name,这边的id_name为/号后面的部分
……
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World"    //字符串内容
/>

在活动中,通过setContentView(R.layout.hello_world_layout)来引入xml,这个id就在如上进行了定义,TextView是安卓提供的一个控件,用于在布局中显示文字,android:text就是用来定义文字的文本。

再回归刚才的目录,所以以mipmap开通的文件夹是用来存放应用程序图标的,之所以那么多,是为了让应用程序更好的兼容设备。分别有高分辨率版本和低分辨率版本。当然,drawable也不例外,只是Android Studio没有自动帮我们生成。

最后说说AndroidManifest.xml文件,我看懂的意思也就是所有的活动都需要在此注册一遍吧,如不注册活动便不能使用。由于Android Studio自动帮忙注册了,那我是听说以前用Eclipse + ADT的人经常忘记注册导致程序运行时崩溃,没体验过。

打开看了下内容,做个归纳总结。比如之前创建了个活动,就是引入一个布局文件。那么那个就要进行注册。由于我后来又新建了新的项目与新的活动,所以只是拿这个来说事一下:

 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".FirstActivity"
            android:label="This is FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>
    </application>

主要看到application标签里面,每个活动的注册格式如下:

<activity android:name=".xxxxxxx"></activity>

每个活动就用一个标签,多个活动就用多个这样的标签就好,其中xxxx部分为活动的名称,刚才说过活动其实就是java目录下的。java源码文件,所以就是其文件名不包含后缀。前面的一个点号,代表一个完整的包名,不过AndroidManifest.xml这个文件中的manifest标签里默认定义了package,所以用.号来表示省略。

但是以antivity外注册完成后安装是可以装但不会显示安装程序图标,那是因为活动可能有多个,但是你没有设置一个主活动。主活动就是用于启动APP时候触发的第一个活动。所以主活动要在intent-filter里进行注册,刚才的代码已经展示过了,如下重新展示主活动部分注册的代码:

<activity
    android:name=".FirstActivity"
    android:label="This is FirstActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

我已经说了这是另外新建的一个项目的其他活动内容,所以就不是Hello World了,上面的android:name遵循正常定义活动的格式,其中,label是比其他活动多出来的一个参数,他具有一个功能就是定义顶部的标题栏的名字。不仅仅如此,label同时还作为桌面APP启动图标的名称。intent-filter里面的内容是主活动的最关键的两行代码,就当成照常格式好了。其他的活动IDE会帮忙自动注册。

这几天初学入门以来最大的理解与收获,可能写的比较乱,语序也不是那么的好,可能只有自己能看懂。但我还是要记录一下,给自己好好回味回味!