Android 开发札记初级(五)重要文件解析
之前我们创建了一个 Hello World 项目,根据前几节的了解,gradle 和系统已经自动帮我们生成了项目的文件,现在让我们来看看一些主要文件的代码和作用。
app | src | AndroidManifest.xml
这个是我们 Android 项目的配置文件,我们在应用程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。( 注意:与 eclipse 不同的是,项目中的versionCode
、versionName
以及对程序最低兼容和目标版本的控制不再是在这里,而是在项目的build.gradle
里面)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.newam.helloworld">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HelloWorldActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 每个 XML 文档都由 XML 序言开始,在前面的代码中的第一行便是 XML序言,
<?xml version="1.0" encoding="utf-8"?>
这一行代码会告诉解析器和浏览器,这个文件应该按照 1.0 版本的 XML 规则进行解析,且文件采用 utf-8 的编码格式。 -
manifest xmlns:android="http://schemas.android.com/apk/res/android"
定义了我们需要使用的架构来源 -
package="com.example.newam.helloworld"
定义了我们程序所在的 java 包,应用包名是应用的唯一标识。 -
<application/>
标签里面的属性如同字面意思,是对R.java
文件里各种资源的引用。 -
<intent-filter/>
里面的两行代码把 HelloWorldActivity 注册为该项目的主要活动活动。 -
.HelloWorldActivity
中.
的意思是com.example.newam.helloworld
的缩写。因为在<manifest/>
标签里面已经通过package
属性指定了程序的包名。使用android:label
指定活动的标题栏的内容,标题栏显示在活动的最顶部,给主活动指定的 label 还会成为 launcher 中应用程序的名称。
main | res | layout | hello_world_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.newam.helloworld.HelloWorldActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<TextView
android:text="I love QYPing!"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="31dp"
android:id="@+id/textView2" />
</RelativeLayout>
-
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
这两行可以理解为语法判断器,按
alt+/
作为提示,提示该输入什么不该输入什么,以及代码对错,不用联网。 -
android:layout_width="match_parent"
android:layout_height="match_parent"
这两行代码是控制组件的宽度和高度,有三个属性可以选择:wrap_content
表示当前元素的高度仅需刚好包含路面的内容就行、fill_parent
和match_parent
作用一样,用于填充父容器水平方向的空间,即拉伸。 -
tools:context="com.example.newam.helloworld.HelloWorldActivity"
不会被打包进 APK,它说明当前的 layout 渲染的上下文是hello_world_layout.xml
里面activity android:name
所指定的那个activity,如果这个 activity 在hello_world_layout.xml
里面设置了某个 theme ,那么 ADT 的Layout Editor 会在 Design 可视化视图中即时渲染对应 theme 的背景控件,描述了一种所见即所得的效果。 -
<TextView/>
是安卓系统提供的一个控件,用于在布局中显示文字,android:text
为这个控件设置文本,因为 字符串的定义都是使用键值对的形式,引用了string.xml
资源里面的hello_world
键,它对应了一个Hello World!
的值,所以最终能显示出来我们看到的文字 。
main | java | com | username | helloworld | HelloWorldActivity.java
package com.example.newam.helloworld;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class HelloWorldActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//代码提示快捷键:Ctrl+Alt+空格键选中activity_main可以打开到指定的R.java文件中。
//onCreate方法是一个活动被创建时必定被执行的方法
super.onCreate(savedInstanceState);
//这个方法给当前的活动引入了一个叫做hello_world_layout布局
setContentView(R.layout.hello_world_layout);
//Log是安卓的工具类(android.util.Log)提供了如下几个方法供我们打印日志,如下在logcat中只打印debug信息
Log.d("HelloWorldActivity","onCreate execute");
}
}
- 每个 activity 的注册声明必须得放在
AndroidManifest.xml
的<application/>
这个标签里面,不然会报错。我们通过<activity/>
这个标签进行注册,并使用android:name
这个属性来指定要注册 activity 的名称。 - 如果要隐藏标题栏,对于
Activity
,得把requestWindowFeature(Window.FEATURE_NO_TITLE);
添加到onCreate();
方法里面;而对于AppCompatActivity
,使用getSupportActionBar().hide();
即可。 - 调用一个
setContentViews();
方法来给当前的活动加载一个布局,而在该方法中我们一般会传入一个 layout 的 id,刚刚创建的布局的 id 现在已经添加到 R 文件中了,这里的 R 文件是 app| build generated | source | r | debug| com下的R.java
文件,而 External Libraries| AndroidSDK | res,也是一个 R 文件,不能混淆了。
推门看到覆满天际细碎的云絮。西边树丛后的晚霞像野火余烬被风吹过,骤然亮起;然后光色急遽变幻,冷凝,沉落,漫天云纹随之潜入夜色。这大地之上的璀然告别发生在短短的十分钟里,突然一阵惶然失措,让人什么都来不及想、来不及说。