20155303 實驗四 Android程序設計

20155303 實驗四 Android程序設計

目錄

第24章:初識Android

任務一:

完成Hello World, 要求修改res目錄中的內容,Hello World後要顯示本身的學號

完成這個任務,首先須要瞭解Android應用程序文件的組成:html

  • src目錄:
    • 在src目錄中保存了開發人員編寫的程序文件。與通常的java項目相似,src目錄下保存的是項目的全部包及源文件(.java),res目錄下包含了項目中的全部資源。例如:程序圖標(drawable)、佈局文件(layout)和常量(value)等。
    • R.java文件是定義該項目全部資源的索引文件。通常R類是下面這種格式:
public final class R {
    public static final class attr{
        ...
    }
    public static final class drawable{
        ...
    }
    public static final class layout{
        ...
    }
    public static final class string{
        ...
    }
}

這個文件將使程序中資源的使用變得更加方便。因爲這個文件不能被手動編譯,因此當咱們在項目中加入新的資源時,只須要刷新一下該項目便可。java

  • 注意:在後面編寫程序時可能會出現「沒法找到R類」這樣的錯誤,極可能是編譯出現了問題。但具體狀況還要具體分析。能夠參考博客Android Studio中R文件丟失的解決辦法android

  • manifest:
    • 其中包含了AndroidManifest.xml。這是一個控制文件,用來描述應用程序。不一樣的參數表示不一樣的含義,例如「manifest」爲根節點,描述了package中的全部內容;「application」元素能夠包含application的一些全局和默認的屬性,如標籤、icon、主題等等;「activity」是與用戶交互的主要工具,一般包含一個或多個activity元素,描述App中的各類活動。這一點在後面的任務中還有體現。
  • res目錄:
    • 存放了應用程序使用到的各類資源,如xml界面文件、圖片、數據等。一般包含drawable子目錄、layout子目錄、values子目錄三個。
    • drawable:存放分辨率不一樣的圖片。
    • layout:存放xml界面佈局文件,主要用於顯示用戶操做界面。
    • values:存放不一樣類型的數據,如string、array等。

對於這個任務,咱們只須要將佈局文件activity_main.xml中相應的內容稍作修改:網絡

將其中的android:text="Hello World!"改成android:text="Hello World!\n\t20155303"便可。app

運行結果以下:框架

學習Android Stuidio調試應用程序

Android Stuidio調試應用程序的方法和普通的java程序調試方法相似。除此以外,須要注意的一點是,可使用日誌工具調試程序,很是簡便。ide

調試過程以下:Tools->Android->Android Device Monitor工具

返回目錄
佈局

第25章:活動

任務二:建立 ThirdActivity, 在ThirdActivity中顯示本身的學號,修改代碼讓MainActivity啓動ThirdActivity

  • 配置Activity
    • 在文件AndroidManifest.xml中,只要爲application...元素添加activity...子元素,便可配置Activity。
    • 在這個任務中,咱們須要調用ThirdActivity,因此在AndroidManifest.xml中再添加一個activity...>便可。
  • 啓動、關閉Activity
    • 每個控制文件的Activity都須要有對應的啓動程序文件(.java),和相應的佈局文件(.xml)。
    • 在這個任務中,要求讓MainActivity啓動ThirdActivity,因此還須要修改MainActivity,相應代碼段改成:
@Override
    public boolean onTouch(View arg0, MotionEvent event) {
        Intent intent = new Intent(this, ThirdActivity.class);
        intent.putExtra("message", "20155303狄唯佳");
        startActivity(intent);
        return true;
    }

在物理機上運行結果如圖:學習

返回目錄

第26章:UI組件

  • UI組件主要爲主活動構建用戶交互。在Android系統中,類View是一個最基本的UI類,幾乎全部的UI組件都是繼承於View類而實現的。
  • 類View的主要功能主要有:
    • 爲指定的屏幕矩形區域存儲佈局和內容;
    • 處理尺寸和佈局,繪製,焦點改變,翻屏,按鍵,手勢
    • ......

任務三:修改代碼讓Toast消息中顯示本身的學號信息

  • Toast是Android中用來顯示信息的一種機制。Toast顯示的時間有限,在通過一段時間後就會自動消失。
  • Toast有不少用法,如默認顯示、自定義顯示位置、帶圖片的顯示、徹底自定義顯示、其餘線程調用顯示等等。這裏展現最經常使用的默認顯示。

activity_main示例以下:

<?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.dragon.toast.Main">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="20155303狄唯佳"
        android:id="@+id/btn1"
        android:layout_alignParentTop="true"
        android:layout_marginTop="31dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

MainActivity.java示例以下:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnshow1 = (Button) findViewById(R.id.btn1);
        btnshow1.setOnClickListener(new View.OnClickListener()
                                    {
                                        @Override
                                        public void onClick(View v){
                                            Toast toast = Toast.makeText(MainActivity.this,"20155303狄唯佳", Toast.LENGTH_LONG);
                                            toast.show();
                                        }
                                    });

在物理機上演示結果以下:

- 注意:
- Android中官方建議的屏幕適配方式,經過根據不一樣的分辨率在工程的res文件夾下創建不一樣的尺寸文件夾,每一個文件夾下都創建dimens.xml文件。而後根據不一樣的尺寸在dimens.xml文件夾中分別計算配置不一樣的dp或者sp單位。
- 若是直接複製上面的代碼,@dimen/activity_vertical_margin是紅色的。@dimen/activity_vertical_marginvalues文件夾下面的dimens文件裏面有一個name叫作activity_vertical_margin的項,咱們沒有建立dimens文件夾,因此會提示找不到。
- 這個項裏面值是android:paddingBottom的值。若是咱們想設定邊距能夠寫爲:android:paddingBottom="20dp"。不過這種寫法不太建議,正規開發的規範寫法是把尺寸放入dimens文件中。

返回目錄

第27章:佈局

  • 做爲一個重要的Android組件,佈局定義了UI組件的可視化結構。以下是Android中的一些佈局:
    • 線性佈局LinearLayout:將全部子視圖以相同方向(水平地或豎直地)對齊的一個佈局;
    • 相對佈局RelativeLayout:根據子視圖的一個或多個同級視圖的位置來排列它的一個佈局;
    • 幀佈局FrameLayout:將每個子視圖放在另外一個視圖頂部的一種佈局;
    • 表格佈局TableLayout:將子視圖按照行和列來組織的一種佈局;
    • 網格佈局GridLayout:將子視圖放置到一個柵格中的一種佈局
    • ......

任務四:修改佈局讓P290頁的界面與教材不一樣

P290是一個幀佈局的示例,那麼咱們就以這個爲例進行具體說明。

  • 幀佈局容器爲每一個組件建立一個空白區域,一個區域稱爲一幀,這些幀會根據FrameLayout中定義的gravity屬性自動對齊。
  • 咱們須要爲組件添加layout_gravity屬性,從而自定義組建的對齊方式。若是不使用layout_gravity屬性,多項內容會重疊。
  • layout_gravity可使用以下所示的取值:
    • top:將對象放在其容器的頂部,不改變其大小;
    • bottom:將對象放在其容器的底部,不改變其大小;
    • left:將對象放在其容器的左側,不改變其大小;
    • certer_vertical:將對象縱向居中,不改變其大小,垂直方向上居中對齊;
    • ......

好比我修改的結果以下(內容較少,因此我就沒有使用layout_gravity屬性來控制其在父控件中的位置):

<TextView   
    android:id="@+id/tv1"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:textSize="50sp"  
    android:textColor="#000000"  
    android:text="20155303"/>  
<TextView   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:textSize="40sp"  
    android:textColor="#ffff00"    
    android:text="狄唯佳"/>

查看xml文件,這樣就獲得瞭如下效果:

返回目錄

第28章:監聽器

  • Android是基於事件的。使用活動中的一個視圖進行的用戶交互,可能會觸發一個事件,包括點擊、長按、觸碰和按鍵等等。
  • 要讓程序響應某一個事件,須要爲該事件編寫一個監聽器。也就是要實現嵌入在android.view.View類中的一個接口。好比OnClickListener接口的onClick()方法。

任務五:運行教材本章相關代碼並截圖

以課本P298爲例,代碼以下:

int counter = 0;
    int[] colors = { Color.BLACK, Color.BLUE, Color.CYAN,
            Color.DKGRAY, Color.GRAY, Color.GREEN, Color.LTGRAY,
            Color.MAGENTA, Color.RED, Color.WHITE, Color.YELLOW };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
// is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    public void changeColor(View view) {
        if (counter == colors.length) {
            counter = 0;
        }
        view.setBackgroundColor(colors[counter++]);
    }

當用戶按下(或觸碰)時鐘的時候,會調用該方法並接受時鐘對象。要修改時鐘的顏色,須要調用其setBackgroundColor方法,傳入一個顏色對象,從而實現觸碰時鐘改變顏色。

在物理機上運行結果以下:

返回目錄

實驗體會與總結

  • 此次實驗是全新的內容,將java用在了咱們以前從未接觸過的領域——Android開發。教材上的知識比較基礎,但對於咱們初學者來講起到了很好的引領做用。在我看來,此次實驗的目的不在於讓咱們學到多麼複雜深奧的知識,而在於給了咱們拓寬視野的機會,培養咱們對未知事物的興趣。完成此次實驗,咱們大體瞭解了Android開發的流程和框架,爲從此深刻學習打下了基礎。
  • 五個任務都很基礎,也較容易實現,雖然安裝AndroidStudio、建立project等等的過程當中遇到了重重阻隔,不過有了老師的幫助,再加上能夠查閱大量資源,一個一個的問題也就迎刃而解了。
  • 婁老師以前說過,「知識能造成結構,有融會貫通的感受,才能體會到學習的樂趣,困難的事情也會越作越容易」。對這句話的理解也在學習的過程當中不斷加深。各個未知的知識領域之間的關係錯綜複雜,初學者老是拘泥於一個點而不是整個網絡。若是理清學科之間的關係,不但對單個領域有了更加深刻全面的認識,最重要的是能觸類旁通,舉一反三。這樣一來,知識體系的寬度和深度都有了質的提高。

  • 最後一點小小的感想...每一次都在本該嚴肅的技術博客中附上學習的心路歷程,分享過愉悅也記錄過迷茫,博客儼然成了個人心情全紀實…哈哈:)...不過回頭看看,這個學期真的收穫不少,但願本身可以繼續保持這種狀態,一點一點進步吧~

返回目錄

參考資料

相關文章
相關標籤/搜索