Android 開發(fā)札記初級(五)重要文件解析

之前我們創(chuàng)建了一個 Hello World 項目,根據(jù)前幾節(jié)的了解,gradle 和系統(tǒng)已經(jīng)自動幫我們生成了項目的文件,現(xiàn)在讓我們來看看一些主要文件的代碼和作用。

app | src | AndroidManifest.xml

這個是我們 Android 項目的配置文件,我們在應(yīng)用程序中定義的所有四大組件都需要在這個文件里注冊,另外還可以在這個文件中給應(yīng)用程序添加權(quán)限聲明。( 注意:與 eclipse 不同的是,項目中的versionCodeversionName以及對程序最低兼容和目標(biāo)版本的控制不再是在這里,而是在項目的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"?>這一行代碼會告訴解析器和瀏覽器,這個文件應(yīng)該按照 1.0 版本的 XML 規(guī)則進(jìn)行解析,且文件采用 utf-8 的編碼格式。
  • manifest xmlns:android="http://schemas.android.com/apk/res/android" 定義了我們需要使用的架構(gòu)來源
  • package="com.example.newam.helloworld" 定義了我們程序所在的 java 包,應(yīng)用包名是應(yīng)用的唯一標(biāo)識。
  • <application/> 標(biāo)簽里面的屬性如同字面意思,是對R.java文件里各種資源的引用。
  • <intent-filter/> 里面的兩行代碼把 HelloWorldActivity 注冊為該項目的主要活動活動。
  • .HelloWorldActivity.的意思是com.example.newam.helloworld的縮寫。因為在<manifest/>標(biāo)簽里面已經(jīng)通過package屬性指定了程序的包名。使用android:label指定活動的標(biāo)題欄的內(nèi)容,標(biāo)題欄顯示在活動的最頂部,給主活動指定的 label 還會成為 launcher 中應(yīng)用程序的名稱。

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+/ 作為提示,提示該輸入什么不該輸入什么,以及代碼對錯,不用聯(lián)網(wǎng)。

  • android:layout_width="match_parent"
    android:layout_height="match_parent"
    這兩行代碼是控制組件的寬度和高度,有三個屬性可以選擇:wrap_content表示當(dāng)前元素的高度僅需剛好包含路面的內(nèi)容就行、fill_parentmatch_parent作用一樣,用于填充父容器水平方向的空間,即拉伸。

  • tools:context="com.example.newam.helloworld.HelloWorldActivity"不會被打包進(jìn) APK,它說明當(dāng)前的 layout 渲染的上下文是 hello_world_layout.xml里面activity android:name所指定的那個activity,如果這個 activity 在hello_world_layout.xml里面設(shè)置了某個 theme ,那么 ADT 的Layout Editor 會在 Design 可視化視圖中即時渲染對應(yīng) theme 的背景控件,描述了一種所見即所得的效果。

  • <TextView/>是安卓系統(tǒng)提供的一個控件,用于在布局中顯示文字,android:text為這個控件設(shè)置文本,因為 字符串的定義都是使用鍵值對的形式,引用了string.xml資源里面的hello_world鍵,它對應(yīng)了一個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方法是一個活動被創(chuàng)建時必定被執(zhí)行的方法
        super.onCreate(savedInstanceState);
        //這個方法給當(dāng)前的活動引入了一個叫做hello_world_layout布局
        setContentView(R.layout.hello_world_layout);
        //Log是安卓的工具類(android.util.Log)提供了如下幾個方法供我們打印日志,如下在logcat中只打印debug信息
        Log.d("HelloWorldActivity","onCreate execute");
    }
}
  • 每個 activity 的注冊聲明必須得放在 AndroidManifest.xml<application/> 這個標(biāo)簽里面,不然會報錯。我們通過<activity/>這個標(biāo)簽進(jìn)行注冊,并使用 android:name 這個屬性來指定要注冊 activity 的名稱。
  • 如果要隱藏標(biāo)題欄,對于Activity,得把requestWindowFeature(Window.FEATURE_NO_TITLE);添加到 onCreate();方法里面;而對于 AppCompatActivity,使用getSupportActionBar().hide();即可。
  • 調(diào)用一個 setContentViews(); 方法來給當(dāng)前的活動加載一個布局,而在該方法中我們一般會傳入一個 layout 的 id,剛剛創(chuàng)建的布局的 id 現(xiàn)在已經(jīng)添加到 R 文件中了,這里的 R 文件是 app| build generated | source | r | debug| com下的 R.java 文件,而 External Libraries| AndroidSDK | res,也是一個 R 文件,不能混淆了。

推門看到覆滿天際細(xì)碎的云絮。西邊樹叢后的晚霞像野火余燼被風(fēng)吹過,驟然亮起;然后光色急遽變幻,冷凝,沉落,漫天云紋隨之潛入夜色。這大地之上的璀然告別發(fā)生在短短的十分鐘里,突然一陣惶然失措,讓人什么都來不及想、來不及說。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容