《Android操作系統(tǒng)與應(yīng)用開發(fā)》課件第4章_第1頁
《Android操作系統(tǒng)與應(yīng)用開發(fā)》課件第4章_第2頁
《Android操作系統(tǒng)與應(yīng)用開發(fā)》課件第4章_第3頁
《Android操作系統(tǒng)與應(yīng)用開發(fā)》課件第4章_第4頁
《Android操作系統(tǒng)與應(yīng)用開發(fā)》課件第4章_第5頁
已閱讀5頁,還剩185頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第4章Android基本組件4.1

Android用戶界面4.2應(yīng)用程序基礎(chǔ)4.3

Intent(意圖)4.4

Service(服務(wù))4.5

BroadCastReceiver(廣播接收者)4.6

ContentProvider(內(nèi)容提供者)4.7

ActivityLifecycle(活動生命周期)

4.1Android用戶界面

4.1.1TextView(文本視圖)

TextView是一種用于顯示文本信息,如字符串(包括HTML文本)的控件。在Android用戶界面中,通過TextView參數(shù)可對控件顯示進行控制,其效果圖如圖4.1所示。圖4.1TextView布局文件效果圖

(1)創(chuàng)建名為“TextViewExample”的工程,在res/layout/main.xml中添加如下代碼:

<LinearLayout

xmlns:android=“/apk/res/android”

android:layout_width=“fill_parent”

android:layout_height=“fill_parent”

android:orientation="vertical">

<TextView

android:id=“@+id/textview”

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

android:text=“@string/text”/>

</LinearLayout>

LinearLayout表示該Activity為線性布局,其中,layout_width和layout_height分別定義長度和寬度,fill_parent表示布滿整個布局,wrap_content表示根據(jù)內(nèi)容動態(tài)布局,orientation參數(shù)用于控制布局方向,vertical表示垂直布局,horizontal表示水平布局。TextView控件中的text參數(shù)表示TextView要顯示的文本,這里的文本值為res/values/

strings.xml中定義的text元素的值。

(2)修改TextViewExampleActivity.java中的代碼:

publicclassTextViewExampleActivityextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);//獲取xml配置文件定義的TextView控件

TextViewtextView=(TextView)findViewById(R.id.textview);

//設(shè)置顯示文本的顏色,也可以在xml配置文件中定義

textView.setTextColor(Color.RED);

//設(shè)置顯示文本的字體大小

textView.setTextSize(20);

//設(shè)置TextView控件的背景顏色

textView.setBackgroundColor(Color.BLUE);

}

}

Activity的入口為onCreate()方法,首先調(diào)用setContentView(R.layout.main)設(shè)置Activity布局,并通過調(diào)用findViewById()方法來獲取布局文件中的TextView控件,然后設(shè)置TextView控件的相關(guān)屬性,如字體顏色、大小等。這些屬性也可以在TextView控件的配置文件中定義。4.1.2Button(按鈕)

AndroidSDK在布局中常用的簡單按鈕控件為Button和ImageButton。利用Button按鈕控件,用戶能在該空間上點擊后引發(fā)相應(yīng)的事件處理函數(shù)。Toast是Android中用來顯示簡潔信息(例如:幫助或提示)的一種機制,它沒有焦點,而且其顯示的時間有限,超過一定的時間就會自動消失。本小節(jié)主要是實現(xiàn)一個簡單的Button控件實例,如圖4.2所示。圖4.2Button控件圖

(1)創(chuàng)建一個名為“TextViewExample”的Android工程,修改布局文件res/layout/main.xml:

<?xmlversion=“1.0”encoding=“utf-8”?>

<LinearLayoutxm

lns:android=“/apk/res/android”

android:layout_width=“fill_parent”

android:layout_height=“fill_parent”

android:orientation="vertical"><TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/text"/>

<Button

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/button_text"/>

</LinearLayout>(2)在ButtonExampleActivity.java中添加Button控件事件監(jiān)聽:

//獲取Button控件

Buttonbtn=(Button)findViewById(R.id.button);

//設(shè)置Button控件的事件監(jiān)聽

btn.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

//這部分是自動產(chǎn)生方法樁

Toast.makeText(ButtonExampleActivity.this,"點擊了OK按鈕",Toast.LENGTH_SHORT).show();

}

});首先調(diào)用findViewById()方法獲取Button控件,然后設(shè)置Button的事件監(jiān)聽,當(dāng)Button控件被點擊時,程序會執(zhí)行onClick()方法。我們在這里使用Toast來提示事件響應(yīng),makeText()函數(shù)對顯示進行控制,其中第一個參數(shù)是Context,一般為當(dāng)前Activity;第二參數(shù)是要顯示的文本信息;第三個參數(shù)是要顯示的時間。設(shè)置完成后調(diào)用show()方法進行顯示。4.1.3EditText(編輯框)

EditText是用來輸入和編輯字符串的控件,可認(rèn)為是一種具有編輯功能的TextView。本小節(jié)介紹如何實現(xiàn)一個動態(tài)顯示編輯框內(nèi)容的應(yīng)用編輯框,如圖4.3所示。圖4.3編輯框的應(yīng)用示例圖

(1)創(chuàng)建一個名為“EditTextExample”的Android工程,在布局文件中定義TextView和EditText兩個控件:

<TextView

android:id=“@+id/edittext_display”

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

android:text="@string/text_default"/>

<EditText

android:id=“@+id/edittext”

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

android:text=""/>

(2)主程序代碼獲取控件,并設(shè)置監(jiān)聽:

//獲取TextView對象

editTextDisplay=

(TextView)findViewById(R.id.edittext_display);

//獲取EditText對象

editText=(EditText)findViewById(R.id.edittext);

//設(shè)置TextView的文本字體大小

editTextDisplay.setTextSize(20);

//設(shè)置EditText事件監(jiān)聽

editText.setOnKeyListener(newEditText.OnKeyListener()

{

publicbooleanonKey(Viewv,intkeyCode,KeyEvent

event){

//這部分是自動產(chǎn)生方法樁

//設(shè)置TextView的文本

editTextDisplay.setText(getResources().getString(R.string.text_default)+editText.getText().

toString());

returnfalse;

}

}

);4.1.4RadioButton(單選按鈕)

RadioButton就是單選按鈕,Android單項選擇是通過RadioGroup、RadioButton來實現(xiàn)單項選擇效果的。本小節(jié)介紹如何實現(xiàn)一個單項選擇。程序運行界面如圖4.4所示。圖4.4RadioButton使用實例圖

(1)創(chuàng)建一個名為“RadioButtonExample”的Android工程,在res/values目錄下的String.xml中修改并添加字符串

常量:

<resources>

<stringname=“app_name”>RadioButton實現(xiàn)單向選擇實例</string>

<stringname=“title”>Android底層是基于什么操作系統(tǒng)的?</string>

<stringname=“radiobutton1”>Windows</string>

<stringname=“radiobutton2”>Linux</string>

<stringname=“radiobutton3”>MacOS</string>

<stringname=“radiobutton4”>Java</string>

</resources>

(2)在main.xml布局文件中添加控件:

<TextView

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

android:text="@string/title"/><RadioGroup

android:id="@+id/radiogroup"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="vertical">

<RadioButton

android:id="@+id/radiobutton1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/radiobutton1"/>

<RadioButton

android:id="@+id/radiobutton2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/radiobutton2"/>

<RadioButton

android:id="@+id/radiobutton3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/radiobutton3"/>

<RadioButton

android:id=“@+id/radiobutton4”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“@string/radiobutton4”/>

</RadioGroup>

(3)修改RadioButtonExampleActivity.java如下:

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//獲取控件

RadioGroup=(RadioGroup)findViewById(R.id.radiogroup);RadioButton1=(RadioButton)findViewById(R.id.radiobutton1);

RadioButton2=(RadioButton)findViewById(R.id.radiobutton2);

RadioButton3=(RadioButton)findViewById(R.id.radiobutton3);

RadioButton4=(RadioButton)findViewById(R.id.radiobutton4);

//設(shè)置事件監(jiān)聽radioGroup.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){

publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){

//這部分是自動產(chǎn)生方法樁

if(checkedId==RadioButton2.getId())

{

displayToast("回答正確!");

}

else {

displayToast("回答錯誤!");

}

}

});

}

//顯示Toast

privatevoiddisplayToast(Stringstr)

{

Toast.makeText(this,str,Toast.LENGTH_SHORT).show();

}4.1.5CheckBox(多選框)

CheckBox是一種有雙狀態(tài)的按鈕控件,可以選中或者選不中。本小節(jié)介紹如何實現(xiàn)一個多項選擇,如圖4.5所示。圖4.5CheckBox實例圖具體實現(xiàn)步驟如下:

(1)創(chuàng)建一個名為“CheckBoxExample”的Android工程,在res/values目錄下的String.xml中修改并添加字符串常量:

<resources>

<stringname="app_name">CheckBox實現(xiàn)多選實例</string>

<stringname="title">調(diào)查:你喜歡Android的原因?</string><stringname="checkbox1">無界限的應(yīng)用程序</string>

<stringname="checkbox2">應(yīng)用程序是在平等的條件下創(chuàng)建的</string>

<stringname="checkbox3">應(yīng)用程序可以輕松地嵌入網(wǎng)絡(luò)</string>

<stringname="checkbox4">應(yīng)用程序可以并行運行</string>

</resources>

(2)在布局文件main.xml中添加如下控件:

<TextView

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

android:text="@string/title"/><CheckBox

android:id="@+id/checkbox1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/checkbox1"/><CheckBox

android:id="@+id/checkbox2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/checkbox2"/><CheckBox

android:id="@+id/checkbox3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/checkbox3"/><CheckBox

android:id="@+id/checkbox4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/checkbox4"/><Button

android:id=“@+id/submit”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“@string/submit"/>

上述程序首先定義了一個TextView來顯示題目,然后定義了四個CheckBox控件來顯示選項,最后定義了一個Button來提交選項。

(3)在主程序代碼中處理控件響應(yīng):

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//獲取控件

btn_submit=(Button)findViewById(R.id.submit);

checkBox1=(CheckBox)findViewById(R.id.checkbox1);checkBox2=(CheckBox)findViewById(R.id.checkbox2);

checkBox3=(CheckBox)findViewById(R.id.checkbox3);

checkBox4=(CheckBox)findViewById(R.id.checkbox4);

CompoundButton.OnCheckedChangeListeneroccl=newCheckBox.OnCheckedChange

Listener()

{

publicvoidonCheckedChanged(CompoundButtonbuttonView, booleanisChecked){

//這部分是自動產(chǎn)生方法樁

if(buttonView.isChecked())

{

displayToast(buttonView.getText().toString());

}

}

};checkBox1.setOnCheckedChangeListener(occl);

checkBox2.setOnCheckedChangeListener(occl);

checkBox3.setOnCheckedChangeListener(occl);

checkBox4.setOnCheckedChangeListener(occl);

btn_submit.setOnClickListener(newButton.OnClickListener()

{

publicvoidonClick(Viewv){

//這部分是自動產(chǎn)生方法樁 intnum=0;

if(checkBox1.isChecked())

{num++;

}

if(checkBox2.isChecked())

{num++;

} if(checkBox3.isChecked())

{num++;

}

if(checkBox4.isChecked())

{num++;

}

displayToast("總共選擇了"+num+"個!");

}

});

}4.1.6Menu(菜單)

本小節(jié)主要介紹選項菜單,Android手機或者模擬器上有一個Menu按鍵,當(dāng)按下Menu時,每個Activity都可以選擇處理這一請求,在屏幕底部會彈出一個菜單,這個菜單稱為選項菜單(OptionsMenu)。一般情況下,選項菜單最多顯示2排,每排有3個菜單項,如圖4.6所示。圖4.6Menu實例圖

(1)創(chuàng)建一個名為“MenuExample”的Android工程,然后在res中新建menu文件夾,添加menu.xml配置文件:

<menuxmlns:android="/apk/res/android">

<itemandroid:id="@+id/about"

android:title="關(guān)于"/>

<itemandroid:id="@+id/exit"

android:title="退出"/>

</menu>

(2)新建OptionsMenuActivity類,繼承自Activity,并且在AndroidManifest.xml中

進行注冊:

<activity

android:name=".OptionsMenuActivity"

android:label="@string/app_name">

</activity>

(3)?MenuExampleActivity使用配置文件實現(xiàn),主要代碼如下:

@Override

publicbooleanonCreateOptionsMenu(Menumenu){

//這部分是自動產(chǎn)生方法樁

MenuInflaterinflater=this.getMenuInflater();

//設(shè)置menu界面為res/menu/menu.xml

inflater.inflate(R.menu.menu,menu);

returntrue;

}@Override

publicbooleanonOptionsItemSelected(MenuItemitem){

//這部分是自動產(chǎn)生方法樁

switch(item.getItemId())

{

caseR.id.about:

displayToast("菜單ABOUT");

break;

caseR.id.next:

displayToast("菜單Next"); next();

break;

caseR.id.exit:

displayToast(“菜單Exit”);

exit();

break;

}

returntrue;

}

(4)?OptionsMenuActivity調(diào)用add方法實現(xiàn),主要程序如下:

@Override

publicbooleanonCreateOptionsMenu(Menumenu){

//這部分是自動產(chǎn)生方法樁

menu.add(0,MENU_ABOUT,0,“關(guān)于”);

menu.add(0,MENU_NEXT_OR_PRE,1,“返回”);

menu.add(0,MENU_EXIT,1,“退出”);

returntrue;

}@Override

publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){

//這部分是自動產(chǎn)生方法樁

switch(item.getItemId())

{

caseMENU_ABOUT:

displayToast("菜單ABOUT");

break;

caseMENU_NEXT_OR_PRE: displayToast("菜單Next");

back();

break;

caseMENU_EXIT:

displayToast("菜單Exit");

exit();

break;

}

returntrue;

}

(5)?back()方法的代碼如下:

privatevoidback()

{

Intentintent=newIntent();

intent.setClass(this,MenuExampleActivity.class);

startActivity(intent);

exit();

}4.1.7Dialog(對話框)

對話框是Android中不可或缺的,而在使用對話框的時候,需要使用AlertDialog.Builder類。當(dāng)然除了系統(tǒng)默認(rèn)的對話框外,還可以自定義對話框,如果對話框設(shè)置了按鈕,那么要對其進行事件監(jiān)聽。本小節(jié)主要是實現(xiàn)一個AlertDialog.

Builder類和自定義的對話框的實例,如圖4.7~圖4.9所示。圖4.7對話框?qū)嵗?

圖4.8對話框?qū)嵗?圖4.9對話框?qū)嵗?

(1)創(chuàng)建一個名為“DialogExample”的Android工程,在res/layout添加登錄對話框的界面配置文件(dialog.xml):

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"android:orientation="vertical">

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/name"/><EditText

android:id="@+id/name"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:singleLine="true"

android:text=""/><TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/password"/><EditText

android:id="@+id/password"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:password="true"

android:singleLine="true"

android:text=""/>

</LinearLayout>

(2)添加第一個對話框,代碼如下:

newAlertDialog.Builder(this)

.setTitle("登錄")

.setMessage("是否轉(zhuǎn)到登錄界面?")

.setPositiveButton("確定",newDialogInterface.OnClickListener(){

@Override publicvoidonClick(DialogInterfacedialog,intwhich){

//這部分是自動產(chǎn)生方法樁

})

.setNegativeButton("取消",newDialogInterface.OnClickListener(){

@Override publicvoidonClick(DialogInterfacedialog,intwhich){

//這部分是自動產(chǎn)生方法樁

DialogExampleActivity.this.finish();

}

})

.show();

(3)添加登錄框:

LayoutInflaterfactory=LayoutInflater.from(DialogExampleActivity.this);

//根據(jù)布局文件獲取View

ViewDialogView=factory.inflate(R.layout.dialog,null);

//創(chuàng)建對話框

AlertDialogad=newAlertDialog.Builder(DialogExampleActivity.this) .setTitle("登錄框")

.setView(DialogView)

.setPositiveButton("登錄",newDialogInterface.OnClickListener(){

@Override

publicvoidonClick(DialogInterfacedialog,intwhich){

//這部分是自動產(chǎn)生方法樁

}

}) .setNegativeButton("取消",newDialogInterface.OnClickListener(){

@Override

publicvoidonClick(DialogInterfacedialog,intwhich){

//這部分是自動產(chǎn)生方法樁

DialogExampleActivity.this.finish();

}

})

.show();

(4)添加進程框:

pd=ProgressDialog.show(DialogExampleActivity.this,"請稍等...","正在登錄...",true);

newThread()

{

publicvoidrun()

{

try

{

sleep(3000);

}catch(Exceptione){

e.printStackTrace();

}

finally

{

//登錄結(jié)束,取消pd對話框

pd.dismiss();

}

}

}

.start();4.1.8ImageButton(圖片按鈕)

在UI設(shè)計中,Button是一個常用的控件,但是Button太普通,不夠藝術(shù)化,和界面的其他元素不協(xié)調(diào),這時,往往希望用圖片代替,ImageButton由此產(chǎn)生。本小節(jié)使用4.1.7節(jié)的Dialog實現(xiàn)一個ImageButton實例,如圖4.10所示。圖4.10圖片按鈕實例

(1)首先新建一個名為“ImageButtonExample”的Android工程,在res目錄下新建名為“drawable”的文件夾,將browser.png和ubuntu.png兩張圖片拷貝到該文件夾下,然后在xml布局文件中定義三個ImageButton控件,使用android:src屬性指定imagebutton1的圖標(biāo)路徑。<ImageButton

android:id=“@+id/imagebutton1”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

ndroid:src="@drawable/browser"/>

(2)在ImageButtonExampleActivity.java中定義三個ImageButton的類變量,調(diào)用findViewbyId方法獲取控件,使用ImageButton中的setImageDrawable方法給imagebutton2和imagebutton3設(shè)置圖標(biāo),最后分別設(shè)置三個控件的事件監(jiān)聽即可。//設(shè)置圖片,由于imagebutton1在布局文件中已經(jīng)設(shè)置,因此這里就不設(shè)置了

imagebutton2.setImageDrawable(getResources().getDrawable(R.drawable.ubuntu));

//imagebutton3使用系統(tǒng)圖標(biāo)

imagebutton3.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_call_incoming));4.1.9ImageView(圖片視圖)

ImageView是一種顯示圖片的控件,本小節(jié)使用ImageView和線程實現(xiàn)一個透明度逐漸變化的圖片,如圖4.11所示。圖4.11圖片視圖示例具體實現(xiàn)步驟如下:

(1)新建一個名為“ImageViewExample”的Android工程,在界面配置文件main.xml中添加ImageView和TextView兩個控件。其中,ImageView用來顯示圖片;TextView用來顯示當(dāng)前透明度的數(shù)值。

(2)在ImageViewExampleActivity中獲取相應(yīng)的控件,調(diào)用ImageView的setAlpha方法設(shè)置默認(rèn)的透明度為256,然后開啟線程,每隔0.2秒調(diào)用一次updateAlpha方法,以更新透明度alpha的值,最后使用Handler來更新圖片。publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//獲取控件

image=(ImageView)findViewById(R.id.imageview);

text=(TextView)findViewById(R.id.text);//設(shè)置透明度

image.setAlpha(alpha);

//開啟一個線程使得alpha值遞減

newThread(newRunnable()

{

publicvoidrun()

{

while(isrun)

{ try{

Thread.sleep(200);

//更新alpha值

updateAlpha();

}catch(InterruptedExceptione)

{

e.printStackTrace();

}

}

}

}).start(); //接受消息之后更新ImageView視圖

handler=newHandler()

{

@Override

publicvoidhandleMessage(Messagemsg)

{ super.handleMessage(msg);

image.setAlpha(alpha);

text.setText("現(xiàn)在alpha值是:"+alpha);

//更新

image.invalidate();

}

};

}publicvoidupdateAlpha()

{

if(alpha-7>=0)

{

alpha-=7;

}

else

{ alpha=0;

isrun=false;

}

//發(fā)送需要更新ImageView視圖的消息

handler.sendMessage(handler.obtainMessage());

}4.1.10ListView(列表視圖)

在Android開發(fā)中,ListView是比較常用的組件,它以列表的形式展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適

應(yīng)顯示。本小節(jié)介紹三個ListView示例,如圖4.12~圖4.14所示。圖4.12ListView示例1圖4.13ListView示例2圖4.14ListView示例3

1.使用繼承的ListActivity

使用繼承的ListActivity方式的具體實現(xiàn)步驟如下:

(1)更改ListViewExampleActivity的父類為ListActivity,然后刪除onCreate中的setContentView(R.layout.main)語句。

(2)這里用ArrayAdapter作為適配器,使用系統(tǒng)提供的布局列表方式。下面是adapter的參數(shù),其中,android.R.layout.simple_list_item_1為系統(tǒng)提供的布局方式,僅僅顯示一行數(shù)據(jù);names為定義的字符串?dāng)?shù)組。

ArrayAdapter<String>adapter=newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);調(diào)用setListAdapter可將數(shù)據(jù)填充到ListView中。

(3)定義ListView的事件監(jiān)控onListItemClick,當(dāng)點擊ListView中的元素時,會顯示被點擊的元素內(nèi)容。

2.?xml配置方式

xml配置方式的具體實現(xiàn)步驟如下:

(1)在res/layout中添加新的配置文件listview2.xml,然后添加ListView控件listview。

(2)新建ListView2.java文件,繼承自Activity。在這個Activity中獲取ListView控件,用ArrayAdapter作為適配器,最后設(shè)置ListView的事件監(jiān)控即可。

(3)在AndroidManifest.xml文件中注冊ListView2這個Activity。

<Activity

android:name=“.ListView2”

android:label=“@string/app_title2”>

</Activity>

3.自定義方式

具體實現(xiàn)步驟如下:

(1)在res/layout目錄創(chuàng)建listview_item.xml和listview3.xml兩個配置文件。listview_item使用水平線性布

局來定義ImageView和TextView控件;listview3使用垂直線性布局來定義ListView控件。

(2)新建ListView3.java文件,繼承自Activity。在ListView3中創(chuàng)建內(nèi)部類ViewHolder和MyAdapter。其中ViewHolder用來將兩種控件組合在一起;MyAdapter是自定義的適配器,它繼承自BaseAdapter。當(dāng)繪制ListView時首先會調(diào)用MyAdapter的getCount方法得到ListView的長度,然后調(diào)用getView方法逐一繪制每一行數(shù)據(jù)。

(3)在AndroidManifest.xml文件中注冊ListView3這個Activity。

classViewHolder

{

ImageViewimage;

TextViewtext;

}

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ //這部分是自動產(chǎn)生方法樁

ViewHolderviewHolder=null;

if(convertView==null)

{

viewHolder=newViewHolder();

convertView=layoutInflater.inflate(R.layout.listview_item,null); viewHolder.image=(ImageView)convertView.findViewById(R.id.image);

viewHolder.text=(TextView)convertView.findViewById(R.id.text);

convertView.setTag(viewHolder);

}

else

{ viewHolder=(ViewHolder)convertView.getTag();

}

viewHolder.image.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_

call_incoming));

viewHolder.text.setText(ListViewExampleAs[position]);

returnconvertView;

}4.1.11Layout(界面布局)

如圖4.15所示,Android系統(tǒng)界面布局主要分為線性布局(LinearLayout)、相對布局(RelativeLayout)、表單布局(TableLayout))和幀布局(FrameLayout)等。其中,線性布局又分為垂直線性布局和水平線性布局兩種,絕對布局很少

使用。圖4.15界面布局圖

1.垂直線性布局

圖4.16為一個垂直線性布局的例子,其xml文件的代碼如下:

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"><TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="@color/text1"

android:layout_gravity="center_vertical"/><TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="@color/text2"/><TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="@color/text3"/>

</LinearLayout>圖4.16垂直線性布局示例圖

2.水平線性布局

圖4.17為一個水平線性布局的例子,其xml文件的代碼如下:

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"><TextView

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_weight="1"

android:background="@color/text1"

android:layout_gravity="center_vertical"/><TextView

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_weight="1"

android:background="@color/text2"/>

<TextView

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_weight="1"

android:background="@color/text3"/>

</LinearLayout>圖4.17水平線性布局示例圖

3.相對布局

相對布局的坐標(biāo)取值范圍是相對的。它不僅在Android布局中功能最為強大,而且可以設(shè)置的屬性也最多,因此,這種布局方式使用最為廣泛。

圖4.18為一個相對布局的示例,其對應(yīng)的代碼如下:<?xmlversion="1.0"encoding="utf-8"?>

<RelativeLayoutxmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"><EditText

android:id="@+id/edittext"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/><RelativeLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@id/edittext">

<Button

android:id="@+id/cancel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:text="取消"/>

<Button

android:id=“@+id/sure”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_toLeftOf=“@id/cancel”

android:text=“確定”/>

</RelativeLayout>

</RelativeLayout>圖4.18相對布局示例圖

4.表單布局

表單布局就是把子視圖定位到表單(行和列)中。在表單布局中可以設(shè)置TableRow,也可以設(shè)置表格中每一行顯示的內(nèi)容和位置,還可以設(shè)置顯示的縮進和對齊方式。

圖4.19為一個表單布局的示例,其對應(yīng)的代碼如下:<?xmlversion="1.0"encoding="utf-8"?>

<TableLayoutxmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:stretchColumns="1">

<TableRow> <TextView

android:layout_column="1"

android:text="打開..."

android:padding="3dip"/>

<TextView

android:text="Ctrl-O"

android:gravity="right"

android:padding="3dip"/>

</TableRow> <TableRow>

<TextView

android:layout_column="1"

android:text="保存..."

android:padding="3dip"/>

<TextView

android:text="Ctrl-S"

android:gravity="right"

android:padding="3dip"/> </TableRow>

<TableRow>

<TextView

android:layout_column="1"

android:text="另存為..."

android:padding="3dip"/> <TextView

android:text="Ctrl-Shift-S"

android:gravity="right"

android:padding="3dip"/>

</TableRow>

<View

android:layout_height="2dip"

android:background="#FF909090"/> <TableRow>

<TextView

android:text="*"

android:padding="3dip"/>

<TextView

android:text="導(dǎo)入..."

android:padding="3dip"/> </TableRow>

<TableRow>

<TextView

android:text="*"

android:padding="3dip"/>

<TextView

android:text="導(dǎo)出..."

android:padding="3dip"/> <TextView

android:text="Ctrl-E"

android:gravity="right"

android:padding="3dip"/>

</TableRow>

<View

android:layout_height="2dip"

android:background="#FF909090"/> <TableRow>

<TextView

android:layout_column="1"

android:text="退出"

android:padding="3dip"/>

</TableRow>

</TableLayout>圖4.19表單布局示例圖

5.幀布局

幀布局最簡單,它是一種在屏幕上定制一個空白備用區(qū)域,然后在其中填充一個單一對象的布局方式。

切換卡對應(yīng)的布局可以通過將幀布局作為根布局,然后在其中添加TextView控件來顯示標(biāo)簽的內(nèi)容。

圖4.20為切換卡的一個示例,其布局代碼如下:<?xmlversion="1.0"encoding="utf-8"?>

<TabHostxmlns:android="/apk/res/android"

android:id="@android:id/tabhost"

android:layout_width="fill_parent"

android:layout_height="fill_parent"> <LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TabWidget

android:id="@android:id/tabs"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>

<FrameLayout

android:id="@android:id/tabcontent"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:id="@+id/textview1"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="thisisatab"/>

<TextView

android:id="@+id/textview2"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="thisisanothertab"/>

<TextView

android:id=“@+id/textview3”

android:layout_width=“fill_parent”

android:layout_height=“fill_parent”

android:text=“thisisathirdtab”/>

</FrameLayout>

</LinearLayout>

</TabHost>圖4.20切換卡示例圖4.2應(yīng)用程序基礎(chǔ)

Android應(yīng)用程序是用Java語言編寫的,編譯后的Java代碼——包括應(yīng)用程序要求的任何數(shù)據(jù)和資源文件,通過AAPT(AndroidAssetPackagingTool)工具捆綁成一個Android包,其歸檔文件以.apk為后綴。這個文件是分發(fā)應(yīng)用程序和安裝到移動設(shè)備的中介或工具,由用戶下載到他們的設(shè)備上。一個apk文件中的所有代碼被認(rèn)為是一個應(yīng)用程序。

AAPT工具包含在SDK的tools/目錄下,用于查看、創(chuàng)建、更新與zip兼容的歸檔文件(zip、jar、apk格式文件),它也能將資源文件編譯成二進制包。

盡管可能不會經(jīng)常直接使用AAPT,但是構(gòu)建腳本(BuildScripts)和IDE插件會使用這個工具來打包apk文件,構(gòu)成一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論