通過小項目學Android教程6

來源:互聯網
上載者:User

1      如何做UI

首先建立一個Android工程

1)Application Name:SimpleNotePad

2)Minimum Required SDK:API 14(我不確定設定這個有沒有必要,這一點不打緊目前)

然後一直點下去,直到完成。

1.1      實現首頁Activity

我們先實現首頁Activity:這個Activity是由兩部分組成:

 

·        頂部:頂部是一個ActionBar(類似於網頁的設計,很多網頁頂部是logo和網站標題,Android app現在比較流行的式樣是頂部有一個ActionBar,顯示App的表徵圖、標題和可以提供的操作,例如:


其中

1)是Logo,

2)是App的標題,標題右側的小三角可以點,點擊就下拉出一些菜單;

3)是可以做的操作,

4)叫Action Overflow ,如果你提供了很多操作,但是在3)這個位置放不下,則可以放到4)裡面。

在我們便簽的APP的首頁Activity裡面,我們只在ActionBar裡面顯示Logo和標題,以及添加便簽表徵圖,具體代碼裡面如何添加這個Action表徵圖並響應點擊表徵圖事件,我們一會就介紹。

注意:ActionBar是Android 3.0引進的新功能,對應的SDK版本為11,所以一個Android App要用ActionBar,其Target SDK版本至少為11。

·        中底部:顯示所有便簽,我們這裡的做法是讓首頁的Activity繼承自系統提供的ListActivity,這樣我們只要把資料繫結到這個首頁Activity即可(下面有詳細介紹)。

1.1.1    ActionBar

通過建立工程嚮導,在CreateActivity這步,我們選中的BlankActivity已經帶有ActionBar了,不信,看對話方塊下面的小字!(因為我們選的SDK版本大於11)


嚮導建立Activity的Logo和標題都不符合我們的要求,我們需要修改它。

我們先修改預設的表徵圖,因為是便簽本App,為了更像那麼回事,我們要用一個合適的表徵圖,比如:

 

修改Logo的步驟:

1)開啟sdk內建的NotePad的例子路徑(我機器上是C:\ProgramFiles\Android\android-sdk\samples\android-17\NotePad\res\drawable ),

2)拷貝app_notes.png,

3)然後到我們的工程res/drawable(如果沒有drawable,建立一個),選中drawable,粘貼app_notes.png,這時這個檔案就在drawable目錄底下了。

4)然後開啟AndroidManifest.xml,修改<application>底下的android:icon為:

注意:在AndroidManifest.xml中的<application>標籤內的屬性icon/label分別定義了app的Logo和標題,同時在<activity>標籤內,我也可以定義icon和/或label標籤,如果<activity>內沒有定義,則Activity的Logo和標題用<application>內定義的,否則用自己的,例如:


這個例子裡,MainActivity的標題是@string/app_title,而Logo則是@drawable/app_notes。

我們希望這個App裡面所有的Activity都使用同一個Logo,所以我們只在<application>裡面定義icon,而每個activity都不定義;相反,對於Activity的標題,每個activity都不盡相同:對於首頁Activity,我們用“Notes”這個標題,方法是:

1) 在values/strings.xml裡面添加

<stringname="app_title">Notes</string>

2) 然後在AndroidManifes.xml中修改<activity>的屬性:

        <activity

           android:name="com.example.simplenotepad.MainActivity"

            android:label="@string/app_title">

            …

       </activity>

Logo和標題調整好了,我們需要在ActionBar裡面添加“添加新標籤”表徵圖:注意通過建立工程嚮導,我們的MainActivity.java裡面有這樣的代碼:

 @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }

而且在res/menu底下自動產生了main.xml這個檔案,在這個檔案裡面,我們可以定義要添加到ActionBar的功能表項目(亦稱Action),然後Activity啟動的時候,會調用到onCreateOptionsMenu,這個函數會把main.xml定義的action顯示在ActionBar裡面。

我們修改main.xml如下:

1)將其改名為main_menu.xml:選中main.xml,按下F2,輸入main_menu.xml(注意改名後onCreateOptionsMenu將做自動更新)。

2)更新main_menu.xml的內容為:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item android:id="@+id/menu_add"          android:icon="@drawable/ic_menu_compose"          android:title="@string/menu_add"          android:alphabeticShortcut='a'          android:showAsAction="always" /></menu>

3)在res/values/strings.xml裡面添加:

<string name="menu_add">Newnote</string>

4)用類似修改logo的步驟,從sdk例子中拷貝ic_menu_compose.png到/res/drawable。

運行程式看看效果:


上面的main_menu.xml裡面定義了一個Action,即“添加新便簽”,其中的showAsAction屬性值得關注,這裡為always,即總是顯示這個Action;如果其為ifRoom,則在Action很多的時候,這個Action可能被隱藏在Action Overflow裡面。


響應Action的點擊:在MainActivity.java中添加如下代碼:

import android.widget.Toast;    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case R.id.menu_add:        Toast.makeText(this, "Menu add new note clicked.", Toast.LENGTH_LONG).show();        return true;                default:            return super.onOptionsItemSelected(item);        }    }

我們這裡用Toast(Android的一種顯示訊息的方法)來展示點擊的效果,後面我們將實現在點擊後啟動編輯便簽的Activity:


1.2      實現建立便簽Activity

首先選中SimpleNotePad工程,右擊選擇New =>Other…=>Android=>Android Activity(或者直接點擊Toolbar的第一個New表徵圖),點擊Next,選擇Blank Activity,點擊Next,修改這個新Activity的資訊如下:

 

點擊Next,你可以看到Eclipse將要執行的更新,點擊Finish完成Activity的建立。

注意Eclipse對於建立一個Activity執行的更新包括:

1)在AndroidManifest.xml中添加了新Activity的資訊,在一個App中的所有Activity都需要在AndroidManifest.xml中定義

2)在res/values/strings.xml添加了新Activity標題和內容的字串。

3)在res/menu中建立了note_editor.xml,這裡包含新Activity的ActionBar資訊。

4)在res/layout中建立了activity_note_editor.xml,這是新Activity的UI定義。

開啟res/layout/activity_note_editor.xml,將其內容更新為:

<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=".NoteEditorActivity" >    <TextView android:id="@+id/titleLabel"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/note_title"/>        <EditText        android:id="@+id/noteTitleEditText"        android:layout_width="match_parent"        android:layout_height="wrap_content"         android:layout_below="@id/titleLabel"/>            <TextView android:id="@+id/contentLabel"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/noteTitleEditText"         android:text="@string/note_content"       />         <EditText        android:id="@+id/noteContentEditText"        android:layout_width="match_parent"        android:layout_height="wrap_content"         android:layout_below="@id/contentLabel"/></RelativeLayout>

我們在這個建立便簽Activity中包含了兩個EditText控制項,讓使用者輸入便簽標題和內容。 

接著我們為建立便簽Activity設定ActionBar,在其中添加“儲存”和“取消”兩個Action:

1)更名res/menu/note_editor.xml為note_editor_menu.xml。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item android:id="@+id/menu_save"          android:icon="@drawable/ic_menu_save"          android:alphabeticShortcut='s'          android:title="@string/menu_save"          android:showAsAction="ifRoom|withText" />    <item android:id="@+id/menu_delete"          android:icon="@drawable/ic_menu_delete"          android:title="@string/menu_delete"          android:showAsAction="ifRoom|withText" /></menu>
2)將ic_menu_save.png和ic_menu_delete.png從sdk sample中拷貝到res/drawable中。 

3)在res/values/strings.xml中添加

    <string name="menu_save">Save</string>    <string name="menu_delete">Delete</string>

1.3      從首頁Activity啟動建立便簽Activity

從一個Activity跳轉到另外一個Activity需要用到Intent:開啟MainActivity.java,更新onOptionsItemSelected為:

import android.content.Intent;    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case R.id.menu_add:        Intent intent = new Intent(this, NoteEditorActivity.class);        startActivity(intent);        return true;                default:            return super.onOptionsItemSelected(item);        }    }

關於Intent:Intent是一種訊息,主要用來從一個Activity啟動另外一個Activity,包括:

1)啟動本App中的另外一個Activity,或者

2)啟動Android系統中的其他App中的某個Activity,例如啟動網路攝影機

在這裡我們使用:

            Intentintent = new Intent(this, NoteEditorActivity.class);            startActivity(intent);

首先構造了一個Intent,建構函式包含一個Context對象(this為一個Activity,Activity本身就繼承自Content),另外一個是要啟動的Activity的資訊。

運行App,點擊首頁的“添加便簽”Action,彈出建立便簽Activity:


到目前為止,我們完成了兩個Activity,並且實現了ActionBar以及從首頁Activity到建立便簽Activity的跳轉,我們只涉及了UI,沒有涉及到便簽資料的處理,接下來,我們開始講解資料存放區和讀取的部分。

思路是從 建立便簽Activity開始,我們在裡面編輯便簽內容後,點擊“儲存”Action,資料應該儲存到資料庫,然後返回到首頁Activity,首頁Activity此時應該顯示新便簽資訊,這條路走通後,我們心裡就有底了。

接下來我們來講解如何向SQLite資料庫存取便簽資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.