20155303 實驗四 Android程序設計


20155303 實驗四 Android程序設計

目錄

第24章:初識Android

任務一:

完成Hello World, 要求修改res目錄中的內容,Hello World后要顯示自己的學號

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

  • 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{
		...
	}
}

這個文件將使程序中資源的使用變得更加方便。由於這個文件不能被手動編譯,所以當我們在項目中加入新的資源時,只需要刷新一下該項目即可。

  • 注意:在后面編寫程序時可能會出現“無法找到R類”這樣的錯誤,很可能是編譯出現了問題。但具體情況還要具體分析。可以參考博客Android Studio中R文件丟失的解決辦法

  • 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"即可。

運行結果如下:

學習Android Stuidio調試應用程序

Android Stuidio調試應用程序的方法和普通的java程序調試方法類似。除此之外,需要注意的一點是,可以使用日志工具調試程序,非常簡便。

調試過程如下: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等等的過程中遇到了重重阻隔,不過有了老師的幫助,再加上可以查閱大量資源,一個一個的問題也就迎刃而解了。

  • 婁老師之前說過,“知識能形成結構,有融會貫通的感覺,才能體會到學習的樂趣,困難的事情也會越做越容易”。對這句話的理解也在學習的過程中不斷加深。各個未知的知識領域之間的關系錯綜復雜,初學者總是拘泥於一個點而不是整個網絡。如果理清學科之間的關系,不但對單個領域有了更加深入全面的認識,最重要的是能舉一反三,觸類旁通。這樣一來,知識體系的寬度和深度都有了質的提升。

  • 最后一點小小的感想...每一次都在本該嚴肅的技術博客中附上學習的心路歷程,分享過愉悅也記錄過迷茫,博客儼然成了我的心情全紀實…哈哈:)...不過回頭看看,這個學期真的收獲很多,希望自己能夠繼續保持這種狀態,一點一點進步吧~

返回目錄

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM