Android界面開(kāi)發(fā)詳解_第1頁(yè)
Android界面開(kāi)發(fā)詳解_第2頁(yè)
Android界面開(kāi)發(fā)詳解_第3頁(yè)
Android界面開(kāi)發(fā)詳解_第4頁(yè)
Android界面開(kāi)發(fā)詳解_第5頁(yè)
已閱讀5頁(yè),還剩161頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

5.1用戶(hù)界面基礎(chǔ)用戶(hù)界面(UserInterface,UI)是系統(tǒng)和用戶(hù)之間進(jìn)行信息交換的媒介,實(shí)現(xiàn)信息的內(nèi)部形式與人類(lèi)可以接受形式之間的轉(zhuǎn)換在計(jì)算機(jī)出現(xiàn)早期,批處理界面(1945-1968)和命令行界面(1969-1983)得到廣泛的使用目前,流行圖像用戶(hù)界面(GraphicalUserInterface,GUI),采用圖形方式與用戶(hù)進(jìn)行交互的界面未來(lái)的用戶(hù)界面將更多的運(yùn)用虛擬現(xiàn)實(shí)技術(shù),使用戶(hù)能夠擺脫鍵盤(pán)與鼠標(biāo)的交互方式,而通過(guò)動(dòng)作、語(yǔ)言,甚至是腦電波來(lái)控制計(jì)算機(jī)5.1用戶(hù)界面基礎(chǔ)設(shè)計(jì)手機(jī)用戶(hù)界面應(yīng)解決的問(wèn)題需要界面設(shè)計(jì)與程序邏輯完全分離,這樣不僅有利于他們的并行開(kāi)發(fā),而且在后期修改界面時(shí),也不用再次修改程序的邏輯代碼根據(jù)不同型號(hào)手機(jī)的屏幕解析度、尺寸和縱橫比各不相同,自動(dòng)調(diào)整界面上部分控件的位置和尺寸,避免因?yàn)槠聊恍畔⒌淖兓霈F(xiàn)顯示錯(cuò)誤能夠合理利用較小的屏幕顯示空間,構(gòu)造出符合人機(jī)交互規(guī)律的用戶(hù)界面,避免出現(xiàn)凌亂、擁擠的用戶(hù)界面Android已經(jīng)解決了前兩個(gè)問(wèn)題,使用XML文件描述用戶(hù)界面;資源資源文件獨(dú)立保存在資源文件夾中;用戶(hù)對(duì)界面描述非常靈活,允許不明確定義界面元素的位置和尺寸,僅聲明界面元素的相對(duì)位置和粗略尺寸5.1用戶(hù)界面基礎(chǔ)Android用戶(hù)界面框架Android用戶(hù)界面框架(AndroidUIFramework)采用MVC(Model-View-Controller)模型提供了處理用戶(hù)輸入的控制器(Controller)顯示用戶(hù)界面和圖像的視圖(View),以及保存數(shù)據(jù)和代碼的模型(Model)5.1用戶(hù)界面基礎(chǔ)Android用戶(hù)界面框架MVC模型MVC模型中的控制器能夠接受并響應(yīng)程序的外部動(dòng)作,如按鍵動(dòng)作或觸摸屏動(dòng)作等控制器使用隊(duì)列處理外部動(dòng)作,每個(gè)外部動(dòng)作作為一個(gè)對(duì)立的事件被加入隊(duì)列中,然后Android用戶(hù)界面框架按照“先進(jìn)先出”的規(guī)則從隊(duì)列中獲取事件,并將這個(gè)事件分配給所對(duì)應(yīng)的事件處理函數(shù)http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.1用戶(hù)界面基礎(chǔ)Android用戶(hù)界面框架Android用戶(hù)界面框架(AndroidUIFramework)采用視圖樹(shù)(ViewTree)模型Android用戶(hù)界面框架中的界面元素以一種樹(shù)型結(jié)構(gòu)組織在一起,稱(chēng)為視圖樹(shù)Android系統(tǒng)會(huì)依據(jù)視圖樹(shù)的結(jié)構(gòu)從上至下繪制每一個(gè)界面元素。每個(gè)元素負(fù)責(zé)對(duì)自身的繪制,如果元素包含子元素,該元素會(huì)通知其下所有子元素進(jìn)行繪制5.1用戶(hù)界面基礎(chǔ)Android用戶(hù)界面框架視圖樹(shù)視圖樹(shù)由View和ViewGroup構(gòu)成View是界面的最基本的可視單元,存儲(chǔ)了屏幕上特定矩形區(qū)域內(nèi)所顯示內(nèi)容的數(shù)據(jù)結(jié)構(gòu),并能夠?qū)崿F(xiàn)所占據(jù)區(qū)域的界面繪制、焦點(diǎn)變化、用戶(hù)輸入和界面事件處理等功能View也是一個(gè)重要的基類(lèi),所有在界面上的可見(jiàn)元素都是View的子類(lèi)ViewGroup是一種能夠承載含多個(gè)View的顯示單元ViewGroup功能:一個(gè)是承載界面布局,另一個(gè)是承載具有原子特性的重構(gòu)模塊5.1用戶(hù)界面基礎(chǔ)Android用戶(hù)界面框架單線(xiàn)程用戶(hù)界面在單線(xiàn)程用戶(hù)界面中,控制器從隊(duì)列中獲取事件和視圖在屏幕上繪制用戶(hù)界面,使用的都是同一個(gè)線(xiàn)程特點(diǎn):處理函數(shù)具有順序性,能夠降低應(yīng)用程序的復(fù)雜程度,同時(shí)也能減低開(kāi)發(fā)的難度缺點(diǎn):如果事件處理函數(shù)過(guò)于復(fù)雜,可能會(huì)導(dǎo)致用戶(hù)界面失去響應(yīng)5.2界面控件Android系統(tǒng)的界面控件分為定制控件和系統(tǒng)控件定制控件是用戶(hù)獨(dú)立開(kāi)發(fā)的控件,或通過(guò)繼承并修改系統(tǒng)控件后所產(chǎn)生的新控件。能夠?yàn)橛脩?hù)提供特殊的功能或與眾不同的顯示需求方式系統(tǒng)控件是Android系統(tǒng)提供給用戶(hù)已經(jīng)封裝的界面控件。提供在應(yīng)用程序開(kāi)發(fā)過(guò)程中常見(jiàn)功能控件。系統(tǒng)控件更有利于幫助用戶(hù)進(jìn)行快速開(kāi)發(fā),同時(shí)能夠使Android系統(tǒng)中應(yīng)用程序的界面保持一致性常見(jiàn)的系統(tǒng)控件包括TextView、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、ListView和TabHost5.2界面控件5.2.1

TextView和EditTextTextView是一種用于顯示字符串的控件EditText則是用來(lái)輸入和編輯字符串的控件EditText是一個(gè)具有編輯功能的TextViewhttp://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.1

TextView和EditText建立一個(gè)“TextViewDemo”的程序,包含TextView和EditText兩個(gè)控件上方“用戶(hù)名”部分使用的是TextView,下方的文字輸入框使用的是EditText5.2界面控件5.2.1

TextView和EditTextTextViewDemo在XML文件中的代碼<TextViewandroid:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView01"></TextView><EditTextandroid:id="@+id/EditText01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="EditText01"></EditText>5.2界面控件5.2.1

TextView和EditText第1行android:id屬性聲明了TextView的ID,這個(gè)ID主要用于在代碼中引用這個(gè)TextView對(duì)象“@+id/TextView01”表示所設(shè)置的ID值@表示后面的字符串是ID資源加號(hào)(+)表示需要建立新資源名稱(chēng),并添加到R.java文件中斜杠后面的字符串(TextView01)表示新資源的名稱(chēng)如果資源不是新添加的,或?qū)儆贏(yíng)ndroid框架的ID資源,則不需要使用加號(hào)(+),但必須添加Android包的命名空間,例如android:id="@android:id/empty"5.2界面控件5.2.1

TextView和EditText第2行的android:layout_width屬性用來(lái)設(shè)置TextView的寬度,wrap_content表示TextView的寬度只要能夠包含所顯示的字符串即可第3行的android:layout_height屬性用來(lái)設(shè)置TextView的高度第4行表示TextView所顯示的字符串,在后面將通過(guò)代碼更改TextView的顯示內(nèi)容第7行中“fill_content”表示EditText的寬度將等于父控件的寬度5.2界面控件5.2.1

TextView和EditTextTextViewDemo.java文件中代碼的修改第1行代碼的findViewById()函數(shù)能夠通過(guò)ID引用界面上的任何控件,只要該控件在XML文件中定義過(guò)ID即可第3行代碼的setText()函數(shù)用來(lái)設(shè)置TextView所顯示的內(nèi)容TextViewtextView=(TextView)findViewById(R.id.TextView01);EditTexteditText=(EditText)findViewById(R.id.EditText01);textView.setText("用戶(hù)名:");editText.setText("");http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.2

Button和ImageButtonButton是一種按鈕控件,用戶(hù)能夠在該控件上點(diǎn)擊,并后引發(fā)相應(yīng)的事件處理函數(shù)ImageButton用以實(shí)現(xiàn)能夠顯示圖像功能的控件按鈕5.2界面控件5.2.2

Button和ImageButton建立一個(gè)“ButtonDemo”的程序,包含Button和ImageButton兩個(gè)按鈕,上方是“Button按鈕”,下方是一個(gè)ImageButton控件5.2界面控件5.2.2

Button和ImageButtonButtonDemo在XML文件中的代碼定義Button控件的高度、寬度和內(nèi)容定義ImageButton控件的高度和寬度,但是沒(méi)定義顯示的圖像,在后面的代碼中進(jìn)行定義<Buttonandroid:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button01"></Button><ImageButtonandroid:id="@+id/ImageButton01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageButton>5.2界面控件5.2.2

Button和ImageButton引入資源將download.png文件拷貝到/res/drawable文件夾下在/res目錄上選擇Refresh新添加的文件將顯示在/res/drawable文件夾下R.java文件內(nèi)容也得到了更新否則提示無(wú)法找到資源的錯(cuò)誤5.2界面控件5.2.2

Button和ImageButton更改Button和ImageButton內(nèi)容引入android.widget.Button和android.widget.ImageButton第1行代碼用于引用在XML文件中定義的Button控件第2行代碼用于引用在XML文件中定義的ImageButton控件第3行代碼將Button的顯示內(nèi)容更改為“Button按鈕”第4行代碼利用setImageResource()函數(shù),將新加入的png文件R.drawable.download傳遞給ImageButtonButtonbutton=(Button)findViewById(R.id.Button01);ImageButtonimageButton=(ImageButton)findViewById(R.id.ImageButton01);button.setText("Button按鈕");imageButton.setImageResource(R.drawable.download);5.2界面控件5.2.2

Button和ImageButton按鈕響應(yīng)點(diǎn)擊事件:添加點(diǎn)擊事件的監(jiān)聽(tīng)器第2行代碼中button對(duì)象通過(guò)調(diào)用setOnClickListener()函數(shù),注冊(cè)一個(gè)點(diǎn)擊(Click)事件的監(jiān)聽(tīng)器View.OnClickListener()第3行代碼是點(diǎn)擊事件的回調(diào)函數(shù)第4行代碼將TextView的顯示內(nèi)容更改為“Button按鈕”finalTextViewtextView=(TextView)findViewById(R.id.TextView01);button.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ textView.setText("Button按鈕"); }});imageButton.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ textView.setText("ImageButton按鈕"); }});http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.2

Button和ImageButtonView.OnClickListener()View.OnClickListener()是View定義的點(diǎn)擊事件的監(jiān)聽(tīng)器接口,并在接口中僅定義了onClick()函數(shù)當(dāng)Button從Android界面框架中接收到事件后,首先檢查這個(gè)事件是否是點(diǎn)擊事件,如果是點(diǎn)擊事件,同時(shí)Button又注冊(cè)了監(jiān)聽(tīng)器,則會(huì)調(diào)用該監(jiān)聽(tīng)器中的onClick()函數(shù)每個(gè)View僅可以注冊(cè)一個(gè)點(diǎn)擊事件的監(jiān)聽(tīng)器,如果使用setOnClickListener()函數(shù)注冊(cè)第二個(gè)點(diǎn)擊事件的監(jiān)聽(tīng)器,之前注冊(cè)的監(jiān)聽(tīng)器將被自動(dòng)注銷(xiāo)多個(gè)按鈕注冊(cè)到同一個(gè)點(diǎn)擊事件的監(jiān)聽(tīng)器上,代碼如下5.2界面控件5.2.2

Button和ImageButton第1行至第12行代碼定義了一個(gè)名為buttonListener的點(diǎn)擊事件監(jiān)聽(tīng)器第13行代碼將該監(jiān)聽(tīng)器注冊(cè)到Button上第14行代碼將該監(jiān)聽(tīng)器注冊(cè)到ImageButton上Button.OnClickListenerbuttonListener=newButton.OnClickListener(){ @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.Button01: textView.setText("Button按鈕"); return; caseR.id.ImageButton01: textView.setText("ImageButton按鈕"); return; }

}};

button.setOnClickListener(buttonListener);

imageButton.setOnClickListener(buttonListener);5.2界面控件5.2.3

CheckBox和RadioButtonCheckBox是一個(gè)同時(shí)可以選擇多個(gè)選項(xiàng)的控件RadioButton則是僅可以選擇一個(gè)選項(xiàng)的控件RadioGroup是RadioButton的承載體,程序運(yùn)行時(shí)不可見(jiàn),應(yīng)用程序中可能包含一個(gè)或多個(gè)RadioGroup一個(gè)RadioGroup包含多個(gè)RadioButton,在每個(gè)RadioGroup中,用戶(hù)僅能夠選擇其中一個(gè)RadioButton5.2界面控件5.2.3

CheckBox和RadioButton建立一個(gè)“CheckboxRadiobuttonDemo”程序,包含五個(gè)控件,從上至下分別是TextView01、CheckBox01、CheckBox02、RadioButton01、RadioButton02當(dāng)選擇RadioButton01,

RadioButton02則無(wú)法選擇5.2界面控件5.2.3

CheckBox和RadioButtonCheckboxRadiobuttonDemo在XML文件中的代碼<TextViewandroid:id="@+id/TextView01“ android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"/> <CheckBoxandroid:id="@+id/CheckBox01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="CheckBox01"> </CheckBox> <CheckBoxandroid:id="@+id/CheckBox02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="CheckBox02"> </CheckBox>http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.3

CheckBox和RadioButton第15行<RadioGroup>標(biāo)簽聲明了一個(gè)RadioGroup在第18行和第23行分別聲明了兩個(gè)RadioButton,這兩個(gè)RadioButton是RadioGroup的子元素<RadioGroupandroid:id="@+id/RadioGroup01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioButtonandroid:id="@+id/RadioButton01" android:layout_width="wrap_content" android:layout_height="wrap_content“ android:text="RadioButton01"> </RadioButton> <RadioButtonandroid:id="@+id/RadioButton02" android:layout_width="wrap_content" android:layout_height="wrap_content“ android:text="RadioButton02"> </RadioButton> </RadioGroup>5.2界面控件5.2.3

CheckBox和RadioButton引用CheckBox和RadioButton的方法參考下面的代碼CheckBox設(shè)置點(diǎn)擊事件監(jiān)聽(tīng)器的簡(jiǎn)要代碼與Button設(shè)置點(diǎn)擊事件監(jiān)聽(tīng)器中介紹的方法相似,唯一不同在于將Button.OnClickListener換成了CheckBox.OnClickListenerCheckBoxcheckBox1=(CheckBox)findViewById(R.id.CheckBox01);RadioButtonradioButton1=(RadioButton)findViewById(R.id.RadioButton01);CheckBox.OnClickListenercheckboxListener=newCheckBox.OnClickListener(){ @Override publicvoidonClick(Viewv){ //過(guò)程代碼 }};checkBox1.setOnClickListener(checkboxListener);checkBox2.setOnClickListener(checkboxListener);5.2界面控件5.2.3

CheckBox和RadioButtonRadioButton設(shè)置點(diǎn)擊事件監(jiān)聽(tīng)器的方法RadioButton.OnClickListenerradioButtonListener=newRadioButton.OnClickListener(){ @Override publicvoidonClick(Viewv){ //過(guò)程代碼 }}; radioButton1.setOnClickListener(radioButtonListener);radioButton2.setOnClickListener(radioButtonListener);5.2界面控件5.2.4

SpinnerSpinner是一種能夠從多個(gè)選項(xiàng)中選一選項(xiàng)的控件,類(lèi)似于桌面程序的組合框(ComboBox),但沒(méi)有組合框的下拉菜單,而是使用浮動(dòng)菜單為用戶(hù)提供選擇建立一個(gè)程序“SpinnerDemo”包含3個(gè)子項(xiàng)Spinner控件5.2界面控件5.2.4

SpinnerSpinnerDemo在XML文件中的代碼第5行使用<Spinner>標(biāo)簽聲明了一個(gè)Spinner控件第6行代碼中指定了該控件的寬度為300dip<TextViewandroid:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"/><Spinnerandroid:id="@+id/Spinner01" android:layout_width="300dip" android:layout_height="wrap_content"></Spinner>http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.4

Spinner在SpinnerDemo.java文件中,定義一個(gè)ArrayAdapter適配器,在A(yíng)rrayAdapter中添加需要在Spinner中可以選擇的內(nèi)容,需要在代碼中引入android.widget.ArrayAdapter和android.widget.SpinnerSpinnerspinner=(Spinner)findViewById(R.id.Spinner01);List<String>list=newArrayList<String>();list.add("Spinner子項(xiàng)1");list.add("Spinner子項(xiàng)2");list.add("Spinner子項(xiàng)3");ArrayAdapter<String>adapter=newArrayAdapter<String>(this,

android.R.layout.simple_spinner_item,list);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);5.2界面控件5.2.4

Spinner第2行代碼建立了一個(gè)字符串?dāng)?shù)組列表(ArrayList),這種數(shù)組列表可以根據(jù)需要進(jìn)行增減<String>表示數(shù)組列表中保存的是字符串類(lèi)型的數(shù)據(jù)在代碼的第3、4、5行中,使用add()函數(shù)分別向數(shù)組列表中添加3個(gè)字符串第6行代碼建立了一個(gè)ArrayAdapter的數(shù)組適配器,數(shù)組適配器能夠?qū)⒔缑婵丶偷讓訑?shù)據(jù)綁定在一起第7行代碼設(shè)定了Spinner的浮動(dòng)菜單的顯示方式,其中,android.R.layout.simple_spinner_dropdown_item是Android系統(tǒng)內(nèi)置的一種浮動(dòng)菜單第8行代碼實(shí)現(xiàn)綁定過(guò)程,所有ArrayList中的數(shù)據(jù),將顯示在Spinner的浮動(dòng)菜單中5.2界面控件5.2.4

Spinner設(shè)置android.R.layout.simple_spinner_item浮動(dòng)菜單,顯示結(jié)果如圖適配器綁定界面控件和底層數(shù)據(jù),如果底層數(shù)據(jù)更改了,用戶(hù)界面也相應(yīng)修改顯示內(nèi)容,就不需要應(yīng)用程序再監(jiān)視,從而極大的簡(jiǎn)化的代碼的復(fù)雜性5.2界面控件5.2.5

ListViewListView是一種用于垂直顯示的列表控件,如果顯示內(nèi)容過(guò)多,則會(huì)出現(xiàn)垂直滾動(dòng)條ListView能夠通過(guò)適配器將數(shù)據(jù)和自身綁定,在有限的屏幕上提供大量?jī)?nèi)容供用戶(hù)選擇,所以是經(jīng)常使用的用戶(hù)界面控件ListView支持點(diǎn)擊事件處理,用戶(hù)可以用少量的代碼實(shí)現(xiàn)復(fù)雜的選擇功能5.2界面控件5.2.5

ListView建立一個(gè)“ListViewDemo”程序,包含四個(gè)控件,從上至下分別為T(mén)extView01、ListView01、

ListView02和

ListView035.2界面控件5.2.5

ListViewListViewDemo在XML文件中的代碼 <TextViewandroid:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"/> <ListViewandroid:id="@+id/ListView01" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ListView>5.2界面控件5.2.5

ListView在ListViewDemo.java文件中,首先需要為L(zhǎng)istView創(chuàng)建適配器,并添加ListView中所顯示的內(nèi)容第2行代碼通過(guò)ID引用了XML文件中聲明的ListView第7行代碼聲明了適配器ArrayAdapter,第三個(gè)參數(shù)list說(shuō)明適配器的數(shù)據(jù)源為數(shù)組列表第8行代碼將ListView和適配器綁定finalTextViewtextView=(TextView)findViewById(R.id.TextView01);ListViewlistView=(ListView)findViewById(R.id.ListView01);List<String>list=newArrayList<String>();list.add("ListView子項(xiàng)1");list.add("ListView子項(xiàng)2");list.add("ListView子項(xiàng)3");ArrayAdapter<String>adapter=newArrayAdapter<String>(this,

android.R.layout.simple_list_item_1,list);listView.setAdapter(adapter);5.2界面控件5.2.5

ListView下面的代碼聲明了ListView子項(xiàng)的點(diǎn)擊事件監(jiān)聽(tīng)器,用以確定用戶(hù)在ListView中,選擇的是哪一個(gè)子項(xiàng)AdapterView.OnItemClickListenerlistViewListener=new

AdapterView.OnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){ Stringmsg=””; textView.setText(msg); }};listView.setOnItemClickListener(listViewListener);5.2界面控件5.2.5

ListView第1行的AdapterView.OnItemClickListener是ListView子項(xiàng)的點(diǎn)擊事件監(jiān)聽(tīng)器,同樣是一個(gè)接口,需要實(shí)現(xiàn)onItemClick()函數(shù)。在ListView子項(xiàng)被選擇后,onItemClick()函數(shù)將被調(diào)用第3行的onItemClick()函數(shù)中一共有四個(gè)參數(shù),參數(shù)0表示適配器控件,就是ListView;參數(shù)1表示適配器內(nèi)部的控件,是ListView中的子項(xiàng);參數(shù)2表示適配器內(nèi)部的控件,也就是子項(xiàng)的位置;參數(shù)3表示子項(xiàng)的行號(hào)第4行和第5行代碼用于顯示信息,選擇子項(xiàng)確定后,在TextView中顯示子項(xiàng)父控件的信息、子控件信息、位置信息和ID信息第7行代碼是ListView指定剛剛聲明的監(jiān)聽(tīng)器5.2界面控件5.2.6TabHostTab標(biāo)簽頁(yè)是界面設(shè)計(jì)時(shí)經(jīng)常使用的界面控件,可以實(shí)現(xiàn)多個(gè)分頁(yè)之間的快速切換,每個(gè)分頁(yè)可以顯示不同的內(nèi)容下圖是Android系統(tǒng)內(nèi)置的Tab標(biāo)簽頁(yè),點(diǎn)擊“呼出/接聽(tīng)鍵”后出現(xiàn),用于電話(huà)呼出和查看撥號(hào)記錄、聯(lián)系人http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.6TabHostTab標(biāo)簽頁(yè)的使用首先要設(shè)計(jì)所有的分頁(yè)的界面布局在分頁(yè)設(shè)計(jì)完成后,使用代碼建立Tab標(biāo)簽頁(yè),并給每個(gè)分頁(yè)添加標(biāo)識(shí)和標(biāo)題最后確定每個(gè)分頁(yè)所顯示的界面布局每個(gè)分頁(yè)建立一個(gè)XML文件,用以編輯和保存分頁(yè)的界面布局,使用的方法與設(shè)計(jì)普通用戶(hù)界面沒(méi)有什么區(qū)別5.2界面控件5.2.6TabHost建立一個(gè)“TabDemo”程序,包含三個(gè)XML文件,分別為tab1.xml、tab2.xml和tab3.xml,這3個(gè)文件分別使用線(xiàn)性布局、相對(duì)布局和絕對(duì)布局示例中的main.xml的代碼,并將布局的ID分別定義為layout01、layout02和layout035.2界面控件5.2.6TabHosttab1.xml文件代碼tab2.xml文件代碼tab3.xml文件代碼<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutandroid:id="@+id/layout01"…………</LinearLayout><?xmlversion="1.0"encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/layout02"…………</AbsoluteLayout><?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutandroid:id="@+id/layout03"…………</RelativeLayout>5.2界面控件5.2.6TabHost在TabDemo.java文件中鍵入下面的代碼,創(chuàng)建Tab標(biāo)簽頁(yè),并建立子頁(yè)與界面布局直接的關(guān)聯(lián)關(guān)系packageedu.hrbeu.TabDemo;

importandroid.app.TabActivity;importandroid.os.Bundle;importandroid.widget.TabHost;importandroid.view.LayoutInflater;

publicclassTabDemoextendsTabActivity{ @Override5.2界面控件5.2.6TabHostpublicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); TabHosttabHost=getTabHost(); LayoutInflater.from(this).inflate(R.layout.tab1,

tabHost.getTabContentView(),true); LayoutInflater.from(this).inflate(R.layout.tab2,

tabHost.getTabContentView(),true); LayoutInflater.from(this).inflate(R.layout.tab3,

tabHost.getTabContentView(),true); tabHost.addTab(tabHost.newTabSpec("TAB1") .setIndicator("線(xiàn)性布局").setContent(R.id.layout01));

tabHost.addTab(tabHost.newTabSpec("TAB2")

.setIndicator("絕對(duì)布局").setContent(R.id.layout02));

tabHost.addTab(tabHost.newTabSpec("TAB3")

.setIndicator("相對(duì)布局").setContent(R.id.layout03));

}

}http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.2界面控件5.2.6TabHost第8行代碼的聲明TabDemo類(lèi)繼承與TabActivity,與以往繼承Activity不同,TabActivity支持內(nèi)嵌多個(gè)Activity或View第12行代碼通過(guò)getTabHost()函數(shù)獲得了Tab標(biāo)簽頁(yè)的容器,用以承載可以點(diǎn)擊的Tab標(biāo)簽和分頁(yè)的界面布局。第13行代碼通過(guò)LayoutInflater將tab1.xml文件中的布局轉(zhuǎn)換為T(mén)ab標(biāo)簽頁(yè)可以使用的View對(duì)象第16行代碼使用addTab()函數(shù)添加了第1個(gè)分頁(yè),tabHost.newTabSpec("TAB1")表明在第12行代碼中建立的tabHost上,添加一個(gè)標(biāo)識(shí)為T(mén)AB1的Tab分頁(yè)第17行代碼使用setIndicator()函數(shù)設(shè)定分頁(yè)顯示的標(biāo)題,使用setContent()函數(shù)設(shè)定分頁(yè)所關(guān)聯(lián)的界面布局5.2界面控件5.2.6TabHostTabDemo示例的運(yùn)行結(jié)果如圖5.2界面控件5.2.6TabHost在使用Tab標(biāo)簽頁(yè)時(shí),可以將不同分頁(yè)的界面布局保存在不同的XML文件中,也可以將所有分頁(yè)的布局保存在同一個(gè)XML文件中第一種方法有利于在Eclipse開(kāi)發(fā)環(huán)境中進(jìn)行可視化設(shè)計(jì),并且不同分頁(yè)的界面布局在不同的文件中更加易于管理第二種方法則可以產(chǎn)生較少的XML文件,同時(shí)編碼時(shí)的代碼也會(huì)更加簡(jiǎn)潔5.3界面布局界面布局界面布局(Layout)是用戶(hù)界面結(jié)構(gòu)的描述,定義了界面中所有的元素、結(jié)構(gòu)和相互關(guān)系聲明Android程序的界面布局有兩種方法使用XML文件描述界面布局在程序運(yùn)行時(shí)動(dòng)態(tài)添加或修改界面布局用戶(hù)既可以獨(dú)立使用任何一種聲明界面布局的方式,也可以同時(shí)使用兩種方式5.3界面布局界面布局使用XML文件聲明界面布局的特點(diǎn)將程序的表現(xiàn)層和控制層分離在后期修改用戶(hù)界面時(shí),無(wú)需更改程序的源代碼用戶(hù)還能夠通過(guò)可視化工具直接看到所設(shè)計(jì)的用戶(hù)界面,有利于加快界面設(shè)計(jì)的過(guò)程,并且為界面設(shè)計(jì)與開(kāi)發(fā)帶來(lái)極大的便利性

http://www.anzhuo.cc/forum-45-1.html安卓手機(jī)壁紙下載5.3界面布局5.3.1線(xiàn)性布局線(xiàn)性布局(LinearLayout)是一種重要的界面布局中,也是經(jīng)常使用到的一種界面布局在線(xiàn)性布局中,所有的子元素都按照垂直或水平的順序在界面上排列如果垂直排列,則每行僅包含一個(gè)界面元素如果水平排列,則每列僅包含一個(gè)界面元素5.3界面布局5.3.1線(xiàn)性布局創(chuàng)建Android工程工程名稱(chēng)是LinearLayout包名稱(chēng)是edu.hrbeu.LinearLayoutActivity名稱(chēng)為L(zhǎng)inearLayout為了能夠完整體驗(yàn)創(chuàng)建線(xiàn)性布局的過(guò)程,首先刪除Eclipse自動(dòng)建立的/res/layout/main.xml文件,然后建立用于顯示垂直排列線(xiàn)性布局的XML文件5.3界面布局5.3.1線(xiàn)性布局右擊/res/layout文件夾選擇New→File打開(kāi)新文件建立向?qū)募麨閙ain_vertical.xml保存位置為L(zhǎng)inearLayout/res/layout5.3界面布局5.3.1線(xiàn)性布局雙擊新建立的/res/layout/main_vertical.xml文件,Eclipse將打開(kāi)界面布局的可視化編輯器5.3界面布局5.3.1線(xiàn)性布局可視化編輯器頂部是資源配置清單,可以根據(jù)手機(jī)的配置不同選擇不同的資源,主要用來(lái)實(shí)現(xiàn)應(yīng)用軟件的本地化下部左側(cè)是界面布局和界面控件,用戶(hù)可以將需要的布局和控件拖拽到右面的可視化界面中,并修改布局和控件的屬性右側(cè)是可視化的用戶(hù)界面,能夠?qū)崟r(shí)的呈現(xiàn)用戶(hù)界面,但對(duì)無(wú)法正確顯示中文。左下角的“Layout”和“main_vertical.xml”能夠在可視化編輯器和XML文件編輯器之間切換5.3界面布局5.3.1線(xiàn)性布局在Eclipse右邊的Outline中,雙擊LinearLayout,打開(kāi)線(xiàn)性布局的屬性編輯器線(xiàn)性布局的排列方法主要由Orientation屬性進(jìn)行控制,vertical表示垂直排列,horizontal表示水平排列選擇Orientation的值為vertical,表示該線(xiàn)性布局為垂直排列游戲的策劃接下來(lái)對(duì)本游戲的策劃進(jìn)行簡(jiǎn)單介紹,在真實(shí)的游戲開(kāi)發(fā)中,該步驟還需要更細(xì)致、更具體、更全面,該游戲的策劃如下所列。游戲類(lèi)型運(yùn)行的目標(biāo)平臺(tái)操作方式開(kāi)發(fā)前準(zhǔn)備工作游戲的準(zhǔn)備工作主要是在進(jìn)行開(kāi)發(fā)之前的非代碼方面的準(zhǔn)備工作,主要包括以下兩個(gè)方面。圖片資源的準(zhǔn)備工作聲音資源的準(zhǔn)備工作游戲的架構(gòu)在正式代碼的開(kāi)發(fā)之前,首先對(duì)該游戲的設(shè)計(jì)框架進(jìn)行簡(jiǎn)要介紹,以幫助讀者更好的理解后面的內(nèi)容。游戲的類(lèi)框架http://www.anzhuo.cc/forum-49-1.html安卓三星I9300論壇5.3界面布局5.3.1線(xiàn)性布局缺省情況下,Layoutheight的值為wrap_content,表示線(xiàn)性布局高度等于所有子控件的高度總和,也就是線(xiàn)性布局的高度會(huì)剛好將所有子控件包含其中將Layoutwidth屬性的值改為fill_parent,表示線(xiàn)性布局寬度等于父控件的寬度,就是將線(xiàn)性布局在橫向上占據(jù)父控件的所有空間5.3界面布局5.3.1線(xiàn)性布局打開(kāi)XML文件編輯器,main_vertical.xml文件的代碼如下第2行代碼是聲明XML文件的根元素為線(xiàn)性布局第4、5、6行代碼是在屬性編輯器中修改過(guò)的寬度、高度和排列方式的屬性用戶(hù)在可視化編輯器和屬性編輯器中的任何修改,都會(huì)同步的反映在XML文件中;反之,也是如此<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"></LinearLayout>5.3界面布局5.3.1線(xiàn)性布局將四個(gè)界面控件TextView、EditText、Button、Button先后拖拽到可視化編輯器中所有控件都自動(dòng)獲取控件名稱(chēng),并把該名稱(chēng)顯示在控件上,如TextView01、EditText01、Button01和Button025.3界面布局5.3.1線(xiàn)性布局修改界面控件的屬性所有界面控件都有一個(gè)共同的屬性IDID是一個(gè)字符串,編譯時(shí)被轉(zhuǎn)換為整數(shù),可以用來(lái)在代碼中引用界面元素,一般僅在代碼中需要?jiǎng)討B(tài)修改的界面元素時(shí)才為界面元素設(shè)置ID,反之則不需要設(shè)置ID編號(hào)類(lèi)型屬性值1TextViewId@+id/labelText用戶(hù)名:2EditTextId @+id/entryLayoutwidthfill_parentText[null]3ButtonId @+id/okText確認(rèn)4ButtonId @+id/cancelText取消5.3界面布局5.3.1線(xiàn)性布局從可視化編輯器中發(fā)現(xiàn),界面控件的中文字符都顯示為“□”,因?yàn)榭梢暬庉嬈鬟€不能很好的支持中文字符打開(kāi)XML文件編輯器查看main_vertical.xml文件代碼,發(fā)現(xiàn)在屬性編輯器內(nèi)填入的文字已經(jīng)正常寫(xiě)入到XML文件中,例如第11、20、25行代碼<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical">

<TextViewandroid:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用戶(hù)名:">5.3界面布局5.3.1線(xiàn)性布局</TextView><EditTextandroid:id="@+id/entry" android:layout_height="wrap_content" android:layout_width="fill_parent"> </EditText> <Buttonandroid:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="確認(rèn)">

</Button>

<Buttonandroid:id="@+id/cancel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="取消">

</Button>

</LinearLayout>5.3界面布局5.3.1線(xiàn)性布局將LinearLayout.java文件中的setContentView(R.layout.main),更改為setContentView(R.layout.main_vertical)。運(yùn)行后的結(jié)果如圖5.3界面布局5.3.1線(xiàn)性布局建立橫向線(xiàn)性布局與縱向線(xiàn)性布局相似,只需注意以下幾點(diǎn)建立main_horizontal.xml文件線(xiàn)性布局的Orientation屬性的值設(shè)置為horizontal將EditText的Layoutwidth屬性的值設(shè)置為wrap_content將LinearLayout.java文件中的setContentView(R.layout.main_vertical)修改為setContentView(R.layout.main_horizontal)

5.3界面布局5.3.2框架布局框架布局(FrameLayout)是最簡(jiǎn)單的界面布局,是用來(lái)存放一個(gè)元素的空白空間,且子元素的位置是不能夠指定的,只能夠放置在空白空間的左上角如果有多個(gè)子元素,后放置的子元素將遮擋先放置的子元素使用AndroidSDK中提供的層級(jí)觀(guān)察器(HierarchyViewer)進(jìn)一步分析界面布局層級(jí)觀(guān)察器能夠?qū)τ脩?hù)界面進(jìn)行分析和調(diào)試,并以圖形化的方式展示樹(shù)形結(jié)構(gòu)的界面布局還提供了一個(gè)精確的像素級(jí)觀(guān)察器(PixelPerfectView),以柵格的方式詳細(xì)觀(guān)察放大后的界面界面5.3界面布局5.3.2框架布局在層級(jí)觀(guān)察器中獲得示例界面布局的樹(shù)形結(jié)構(gòu)圖5.3界面布局5.3.2框架布局示意圖5.3界面布局5.3.2框架布局結(jié)合界面布局的樹(shù)形結(jié)構(gòu)圖和示意圖,分析不同界面布局和界面控件的區(qū)域邊界用戶(hù)界面的根節(jié)點(diǎn)(#0@43599ee0)是線(xiàn)性布局,其邊界是整個(gè)界面,也就是示意圖的最外層的實(shí)心線(xiàn)根節(jié)點(diǎn)右側(cè)的子節(jié)點(diǎn)(#0@43599a730)是框架布局,僅有一個(gè)節(jié)點(diǎn)元素(#0@4359ad18),這個(gè)子元素是TextView控件,用來(lái)顯示Android應(yīng)用程序名稱(chēng),其邊界是示意圖中的區(qū)域1。因此框架布局元素#0@43599a730的邊界是同區(qū)域1的高度相同,寬帶充滿(mǎn)整個(gè)根節(jié)點(diǎn)的區(qū)域。這兩個(gè)界面元素是系統(tǒng)自動(dòng)生成的,一般情況下用戶(hù)不能夠修改和編輯根節(jié)點(diǎn)左側(cè)的子節(jié)點(diǎn)(#1@4359b858)也是框架布局,邊界是區(qū)域2到區(qū)域7的全部空間5.3界面布局5.3.2框架布局子節(jié)點(diǎn)(#1@4359b858)下僅有一個(gè)子節(jié)點(diǎn)(#0@4359bd60)元素是線(xiàn)性布局,因?yàn)榫€(xiàn)性布局的Layoutwidth屬性設(shè)置為fill_parent,Layoutheight屬性設(shè)置為wrap_content,因此該線(xiàn)性布局的寬度就是其父節(jié)點(diǎn)#1@4359b858的寬帶,高度等于所有子節(jié)點(diǎn)元素的高度之和線(xiàn)性布局#0@4359bd60的四個(gè)子節(jié)點(diǎn)元素#0@4359bfa8、#1@4359c5f8、#2@4359d5d8和#3@4359de18的邊界,分別是界面布局示意圖中的區(qū)域2、區(qū)域3、區(qū)域4和區(qū)域55.3界面布局5.3.3表格布局表格布局(TableLayout)也是一種常用的界面布局,它將屏幕劃分網(wǎng)格,通過(guò)指定行和列可以將界面元素添加的網(wǎng)格中網(wǎng)格的邊界對(duì)用戶(hù)是不可見(jiàn)的表格布局還支持嵌套,可以將另一個(gè)表格布局放置在前一個(gè)表格布局的網(wǎng)格中,也可以在表格布局中添加其他界面布局,例如線(xiàn)性布局、相對(duì)布局等等http://www.anzhuo.cc/forum-58-1.html安卓HTCOneX論壇5.3界面布局5.3.3

表格布局表格布局示意圖表格布局效果圖游戲的策劃接下來(lái)對(duì)本游戲的策劃進(jìn)行簡(jiǎn)單介紹,在真實(shí)的游戲開(kāi)發(fā)中,該步驟還需要更細(xì)致、更具體、更全面,該游戲的策劃如下所列。游戲類(lèi)型運(yùn)行的目標(biāo)平臺(tái)操作方式開(kāi)發(fā)前準(zhǔn)備工作游戲的準(zhǔn)備工作主要是在進(jìn)行開(kāi)發(fā)之前的非代碼方面的準(zhǔn)備工作,主要包括以下兩個(gè)方面。圖片資源的準(zhǔn)備工作聲音資源的準(zhǔn)備工作游戲的架構(gòu)在正式代碼的開(kāi)發(fā)之前,首先對(duì)該游戲的設(shè)計(jì)框架進(jìn)行簡(jiǎn)要介紹,以幫助讀者更好的理解后面的內(nèi)容。游戲的類(lèi)框架http://www.anzhuo.cc/forum-49-1.html安卓三星I9300論壇5.3界面布局5.3.3

表格布局建立表格布局要注意以下幾點(diǎn)向界面中添加一個(gè)線(xiàn)性布局,無(wú)需修改布局的屬性值。其中,Id屬性為T(mén)ableLayout01,Layoutwidth和Layoutheight屬性都為wrap_content向TableLayout01中添加兩個(gè)TableRow。TableRow代表一個(gè)單獨(dú)的行,每行被劃分為幾個(gè)小的單元,單元中可以添加一個(gè)界面控件。其中,Id屬性分別為T(mén)ableRow01和TableRow02,Layoutwidth和Layoutheight屬性都為wrap_content5.3界面布局5.3.3

表格布局通過(guò)Outline,向TableRow01中添加TextView和EditText5.3界面布局5.3.3

表格布局通過(guò)Outline,向TableRow02中添加兩個(gè)Button參考下表設(shè)置TableRow中四個(gè)界面控件的屬性值編號(hào)類(lèi)型屬性值1TextViewId@+id/labelText用戶(hù)名:GravityrightPadding3dipLayoutwidth160dip2EditTextId @+id/entryText[null]Padding3dipLayoutwidth160dip3ButtonId @+id/okText確認(rèn)Padding3dip4ButtonId @+id/cancelText取消Padding3dip5.3界面布局5.3.3

表格布局main.xml文件的完整代碼如下<?xmlversion="1.0"encoding="utf-8"?>

<TableLayoutandroid:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="/apk/res/android">

<TableRowandroid:id="@+id/TableRow01"

android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextViewandroid:id="@+id/label" android:layout_height="wrap_content" android:layout_width="160dip" android:gravity="right" android:text="用戶(hù)名:" android:padding="3dip"> </TextView>http://www.anzhuo.cc/forum-58-1.html安卓HTCOneX論壇5.3界面布局5.3.3

表格布局<EditTextandroid:id="@+id/entry" android:layout_height="wrap_content" android:layout_width="160dip“ android:padding="3dip"> </EditText> </TableRow> <TableRowandroid:id="@+id/TableRow02"

android:layout_width="wrap_content" android:layout_height="wrap_content"> <Buttonandroid:id="@+id/ok" android:layout_height="wrap_content" android:padding="3dip" android:text="確認(rèn)">

</Button>5.3界面布局5.3.3

表格布局第3行代碼使用了<TableLayout>標(biāo)簽聲明表格布局第7行和第23行代碼聲明了兩個(gè)TableRow元素第12行設(shè)定寬度屬性android:layout_width:160dip第13行設(shè)定屬性android:gravity,指定文字為右對(duì)齊第15行使用屬性android:padding,聲明TextView元素與其他元素的間隔距離為3dip<Buttonandroid:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dip" android:text="取消">

</Button>

</TableRow>

</TableLayout>5.3界面布局5.3.4相對(duì)布局相對(duì)布局(RelativeLayout)是一種非常靈活的布局方式,能夠通過(guò)指定界面元素與其他元素的相對(duì)位置關(guān)系,確定界面中所有元素的布局位置特點(diǎn):能夠最大程度保證在各種屏幕類(lèi)型的手機(jī)上正確顯示界面布局5.3界面布局5.3.4相對(duì)布局相對(duì)布局示例說(shuō)明添加TextView控件(“用戶(hù)名”),相對(duì)布局會(huì)將TextView控件放置在屏幕的最上方然后添加EditText控件(輸入框),并聲明該控件的位置在TextView控件的下方,相對(duì)布局會(huì)根據(jù)TextView的位置確定EditText控件的位置之后添加第一個(gè)Button控件(“取消”按鈕),聲明在EditText控件的下方,且在父控件的最右邊最后,添加第二個(gè)Button控件(“確認(rèn)”按鈕),聲明該控件在第一個(gè)Button控件的左方,且與第一個(gè)Button控件處于相同的水平位置5.3界面布局5.3.4相對(duì)布局相對(duì)布局在main.xml文件的完整代碼如下<?xmlversion="1.0"encoding="utf-8"?>

<RelativeLayoutandroid:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="/apk/res/android"> <TextViewandroid:id="@+id/label" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="用戶(hù)名:"> </TextView> <EditTextandroid:id="@+id/entry" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_below="@id/label"> </EditText>http://www.anzhuo.cc/forum-58-1.html安卓HTCOneX論壇5.3界面布局5.3.4相對(duì)布局17.<Buttonandroid:id="@+id/cancel"android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:layout_marginLeft="10dip" android:layout_below="@id/entry" android:text="取消">

</Button>

<Buttonandroid:id="@+id/ok"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_toLeftOf="@id/cancel"

android:layout_alignTop="@id/cancel“

android:text=“確認(rèn)”>、

</Button></RelativeLayout>5.3界面布局5.3.4相對(duì)布局第3行使用了<RelativeLayout>標(biāo)簽聲明一個(gè)相對(duì)布局第15行使用位置屬性android:layout_below,確定EditText控件在ID為label的元素下方第20行使用屬性android:layout_alignParentRight,聲明該元素在其父元素的右邊邊界對(duì)齊第21行設(shè)定屬性android:layout_marginLeft,左移10dip第22行聲明該元素在ID為entry的元素下方第28行聲明使用屬性android:layout_toLeftOf,聲明該元素在ID為cancel元素的左邊第29行使用屬性android:layout_alignTop,聲明該元素與ID為cancel的元素在相同的水平位置5.3界面布局5.3.5

絕對(duì)布局絕對(duì)布局(AbsoluteLayout)能通過(guò)指定界面元素的坐標(biāo)位置,來(lái)確定用戶(hù)界面的整體布局絕對(duì)布局是一種不推薦使用的界面布局,因?yàn)橥ㄟ^(guò)X軸和Y軸確定界面元素位置后,Android系統(tǒng)不能夠根據(jù)不同屏幕對(duì)界面元素的位置進(jìn)行調(diào)整,降低了界面布局對(duì)不同類(lèi)型和尺寸屏幕的適應(yīng)能力5.3界面布局5.3.5

絕對(duì)布局每一個(gè)界面控件都必須指定坐標(biāo)(X,Y),例如“確認(rèn)”按鈕的坐標(biāo)是(40,120),“取消”按鈕的坐標(biāo)是(120,120)。坐標(biāo)原點(diǎn)(0,0)在屏幕的左上角http://www.anzhuo.cc/forum-58-1.html安卓HTCOneX論壇5.3界面布局5.3.5

絕對(duì)布局絕對(duì)布局示例在main.xml文件的完整代碼<?xmlversion="1.0"encoding="utf-8"?>

<AbsoluteLayoutandroid:id="@+id/AbsoluteLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="/apk/res/android"> <TextViewandroid:id="@+id/label" android:layout_x="40dip" android:layout_y="40dip" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="用戶(hù)名:"> </TextView> <EditTextandroid:id="@+id/entry" android:layout_x="40dip" android:layout_y="60dip"5.3界面布局5.3.5

絕對(duì)布局17.

android:layout_height="wrap_content"18. android:layout_width="150dip">19. </EditText>20. <Buttonandroid:id="@+id/ok"21. android:layout_width="70dip"22. android:layout_height="wrap_content" 23. android:layout_x="40dip"24. android:layout_y="120dip"25. android:text="確認(rèn)">26. </Button>27. <Buttonandroid:id="@+id/cancel"28. android:layout_width="70dip"29. android:layout_height="wrap_content"30. android:layout_x="120dip"31. android:layout_y="120dip" 32. android:text="取消">33. </Button>34.</AbsoluteLayout>5.4

菜單菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開(kāi)發(fā)人員提供了易于使用的編程接口A(yíng)ndroid系統(tǒng)支持三種菜單選項(xiàng)菜單(OptionMenu)子菜單(Submenu)快捷菜單(ContextMenu)5.4

菜單5.4.1選項(xiàng)菜單選項(xiàng)菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單打開(kāi)方式:通過(guò)“菜單鍵”(MENUkey)打

溫馨提示

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

評(píng)論

0/150

提交評(píng)論