官术网_书友最值得收藏!

2.2.1 Activity的使用場景

Activity的使用場景其實可以歸結為一句話,只要有界面展示,我們就需要它。雖然我們把Activity與HTML進行對比學習,但是還需要了解Activity與HTML的不同之處。

第一個不同是package的概念。在Android開發(fā)中,package有很多作用,比如把package理解成一個功能的集合,標識App所屬公司或組織,或者作為引入文件的路徑標識或者文件系統(tǒng)路徑。比如圖2-3中,com.example.chenchen.book其實就是一個package,com.example.chenchen.book是該package所在的路徑。但是在前端開發(fā)概念中,HTML本身并沒有package的概念,通常情況下,我們把HTML引入某個文件的引入地址為HTML的文件路徑。

圖2-3 Android程序中的package

第二個不同是布局文件。用戶界面通常情況下通過標簽的方式直接寫在HTML文件中,但是我們不能直接把布局文件標簽寫在Activity中。

注意

我們可以引入Android的各種標簽類,通過動態(tài)添加畫布的方式將其添加到界面中。前端界面也可以這樣做,現(xiàn)在市面上流行的React、Angular等都是使用這種方法對界面進行繪制的。

Android本質(zhì)上是一個Java類,這個Java類通常繼承了AppCompatActivity類。當我們要對界面進行渲染的時候,需要先設置一個布局文件到Activity中,在圖2-3所示的代碼中,代碼setContentView(R.layout.activity_main)就是設置畫布的。這個畫布的路徑通常會在項目路徑的/res/layout/下,如圖2-4所示,activity_main.xml文件目前就是App的唯一布局文件。

圖2-4 Android布局文件activity_main.xml路徑

注意

當Android應用程序被編譯時,會自動生成一個R類,其中包含了所有res/目錄下資源的ID,如布局文件、資源文件、圖片(values下所有文件)的ID等。在編寫Android應用需要用到這些資源的時候,你可以使用R類,通過子類+資源名或者直接使用資源ID來訪問資源。

接下來在Android Studio中打開這個文件,文件中的代碼如圖2-5所示。圖2-5左側為activity_main.xml布局文件代碼,右側為該布局文件的預覽效果,我們也可以這樣理解:右側所展示的界面就是activity_main.xml展示在手機App上的界面。

圖2-5 Android布局文件activity_main.xml內(nèi)容

接下來讓我們共同分析一下activity_main.xml文件的具體內(nèi)容。第一行代碼<?xml ver-sion="1.0" encoding="utf-8"?>主要是聲明xml文件的版本,以及具體編碼字符集。類似2.1.2節(jié)介紹的<!doctype html>和<meta charset="utf-8">。

第2行中的android.support.constraint.ConstraintLayout其實是一種布局方式,叫作約束布局,與android.support.constraint. RelativeLayout類似,幾年前Android開發(fā)者更習慣使用RelativeLayout來進行相對布局。對比前端來說,我們可以把這種布局方式理解為一個HTML頁面設置了position: relative屬性,也就是頁面中的子元素設置了相對布局方式。不同的地方是,android.support.constraint.ConstraintLayout可以通過角度約束的方式來對activity_main.xml中的內(nèi)容進行布局。這里我們可以讓大家感受一下Android布局,先觀察代碼清單2-6。

代碼清單2-6 ConstraintLayout布局

<Button
    android:id="@+id/button_first"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="first"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    />
<Button
    android:id="@+id/button_second"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="second"
    app:layout_constraintCircle="@+id/button_first"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toTopOf="parent"
    app:layout_constraintCircleAngle="120"
    app:layout_constraintCircleRadius="100dp"
    />

在代碼清單2-6中,有兩個按鈕元素<Button>,分別叫first和second,其他屬性先不用關注,因為我們會在第3章進行詳細介紹,現(xiàn)在只看constraintCircle-Angle = 120和constraintCircleRadius = 100dp就可以了。這兩個屬性表達的含義是以first的<Button>標簽為圓心點,然后在first的<Button>標簽120度的方向,且兩個標簽的圓心點相距120dp的地方展示second的<Button>。頁面具體展示成什么樣子,我們可以通過Android Studio的預覽部分看一下,如圖2-6所示。

圖2-6 ConstraintLayout約束布局樣例

注意

角度和距離的計算都依賴于<Button>標簽的中心點,也就是垂直、水平方向都是中心的點,constraintCircleAngle=120是Android中特有的度量單位,是一種相對設備像素。關于dp部分內(nèi)容可參見3.2.3節(jié),此處只需要理解它是一種度量單位即可。

至于xmlns:android="http://schemas.android.com/apk/res/android",則是xml關于命名空間的定義,主要是防止xml的命名沖突。http://schemas.android.com/apk/res/android看起來是一個訪問地址,但是其實訪問不了,它也是一個語法文件標識,有了它之后你在輸入“android:”的時候,就會彈出這個命名空間下的對應屬性,如圖2-7所示。

圖2-7 “android:”命令提示

Activity和它所依賴的布局文件介紹到這里就結束了,接下來會介紹Activity的常規(guī)配置。

主站蜘蛛池模板: 乐陵市| 内丘县| 安泽县| 得荣县| 苗栗县| 科技| 文水县| 东乌珠穆沁旗| 千阳县| 汉中市| 邛崃市| 开阳县| 库车县| 华坪县| 启东市| 富川| 华亭县| 得荣县| 内乡县| 安溪县| 九寨沟县| 嘉祥县| 米易县| 阳城县| 肃南| 达孜县| 崇阳县| 唐海县| 大安市| 张家界市| 时尚| 永泰县| 大姚县| 同德县| 潮州市| 武威市| 淮北市| 台江县| 禄丰县| 那曲县| 绥阳县|