版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流配送司機薪酬方案
- 光學(xué)儀器工廠租賃合同樣本
- 電力公司用戶數(shù)據(jù)保密制度
- 城市綠化養(yǎng)護招投標(biāo)合同審查
- 水利教師聘用合同模板
- 環(huán)保工程庫房施工合同
- 油氣管道施工員勞動合同樣本
- 購物中心設(shè)施安裝物業(yè)合同
- 醫(yī)療衛(wèi)生評審員管理辦法
- 2025版教育機構(gòu)安全責(zé)任保險合同2篇
- 2024屆甘肅省平?jīng)鍪徐o寧縣英語九年級第一學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 滄源永弄華能100MW茶光互補光伏發(fā)電項目環(huán)評報告
- 倉儲業(yè)行業(yè)SWOT分析
- 輔導(dǎo)員工作匯報課件
- 公司金融學(xué)張德昌課后參考答案
- 商務(wù)英語口語與實訓(xùn)學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- DB3302-T 1015-2022 城市道路清掃保潔作業(yè)規(guī)范
- 手術(shù)室提高患者術(shù)中保溫措施的執(zhí)行率PDCA課件
- 報刊雜志發(fā)放登記表
- 大學(xué)物理(下)(太原理工大學(xué))知到章節(jié)答案智慧樹2023年
- 布袋除塵器項目可行性分析報告
評論
0/150
提交評論