美文网首页Android开发经验谈Android技术知识Android开发
Android 开发札记初级(五)重要文件解析

Android 开发札记初级(五)重要文件解析

作者: Newamber | 来源:发表于2016-12-07 18:07 被阅读0次

    之前我们创建了一个 Hello World 项目,根据前几节的了解,gradle 和系统已经自动帮我们生成了项目的文件,现在让我们来看看一些主要文件的代码和作用。

    app | src | AndroidManifest.xml

    这个是我们 Android 项目的配置文件,我们在应用程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。( 注意:与 eclipse 不同的是,项目中的versionCodeversionName以及对程序最低兼容和目标版本的控制不再是在这里,而是在项目的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_parentmatch_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 文件,不能混淆了。

    推门看到覆满天际细碎的云絮。西边树丛后的晚霞像野火余烬被风吹过,骤然亮起;然后光色急遽变幻,冷凝,沉落,漫天云纹随之潜入夜色。这大地之上的璀然告别发生在短短的十分钟里,突然一阵惶然失措,让人什么都来不及想、来不及说。

    相关文章

      网友评论

        本文标题:Android 开发札记初级(五)重要文件解析

        本文链接:https://www.haomeiwen.com/subject/qafjmttx.html