版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章
Android布局與基本組件3.1Android用戶界面的組件和容器
在設(shè)計Android應(yīng)用程序時,用戶接口(UserInterface,UI)是非常重要的一部分,因?yàn)橛脩魧?yīng)用程序的第一印象就源于此。同時UI的設(shè)計也是一項(xiàng)相當(dāng)繁瑣和有難度的工作。
例如UI大小必須適應(yīng)各類屏幕分辨率的設(shè)備,并是自動調(diào)整而不是由用戶去設(shè)定。
又如UI的設(shè)計和具體功能的實(shí)現(xiàn)需要在邏輯上進(jìn)行分離,從而使UI設(shè)計者和程序開發(fā)者能夠相對獨(dú)立的工作,提高工作的效率,也避免在后期維護(hù)時功能的修改對UI設(shè)計的影響。3.2文本控件的功能與使用方法1、TextView的XML使用當(dāng)創(chuàng)建完第一個Android項(xiàng)目后,Eclipse會自動把界面跳轉(zhuǎn)到UI設(shè)計頁面。在UI設(shè)計頁的正中可以看到已經(jīng)有一串“HelloWorld”的字符,并在該頁的最下方有兩個標(biāo)簽頁,第一頁叫“GraphicalLayout”,此頁為“設(shè)計視圖”,另一個叫“activity_main.xml”,此頁為UI所對應(yīng)的“代碼視圖頁”,現(xiàn)在點(diǎn)擊“activity_main.xml”標(biāo)簽頁就可以看到如圖3-3的界面。3.1Android用戶界面的組件和容器
Android體系中UI的設(shè)計采用視圖樹(ViewHierarchy)的結(jié)構(gòu),而視圖樹則由View和ViewGroup組成,如圖3-1所示。3.2文本控件的功能與使用方法
常見的文本控件有兩種:第一種是TextView:用于顯示文字或字符的控件第二種是EditText:用于用戶的輸入和編輯文字或字符的控件。3.2文本控件的功能與使用方法3.2.1、TextView的XML使用下面就一步步的來創(chuàng)建一個Android應(yīng)用程序,并為其添加一個TextView和EditText。第一步:創(chuàng)建項(xiàng)目。在AndroidStudio的菜單欄中選擇“File”→“New”→“NewProject”命令,打開“NewProject”界面,并在“ApplicationName”輸入“3_01_TextControls”作為應(yīng)用程序的名稱,在“CompanyDomain”輸入“”,最后在“PackageName”中輸入“.siso.textcontrolsdemo”作為應(yīng)用程序的包名。3.2文本控件的功能與使用方法1、TextView的XML使用第二步:設(shè)置應(yīng)用程序名稱。在完成第一步后單擊“Next”按鈕,出現(xiàn)“TargetAndroidDevices”界面,勾選“PhoneandTablet”。第三步:MinimumSDK,選擇API15:Android4.0.3(IceCreamSandwich),不要勾選其他選項(xiàng)(TV,Wear,andAuto),點(diǎn)擊Next。3.2文本控件的功能與使用方法1、TextView的XML使用第四步:并在“CustomizetheActivity”界面中修改ActivityName為MyActivity,修改LayoutName為activity_my,Title修改為MyActivity,MenuResourceName修改為menu_my,當(dāng)然也可以全部取默認(rèn)值,但項(xiàng)目開發(fā)中為了區(qū)分,建議相關(guān)名稱個性化。最后點(diǎn)擊Finish完成創(chuàng)建。3.2文本控件的功能與使用方法3.2.2、TextView的Java使用XML中的一切都定義完成后,有時需要在Java中動態(tài)地對某些控件進(jìn)行修改,此時R.java文件就起到了連接XML中組件與Java代碼中對象的作用,要在R文件中能夠找到XML組件,那么首先就必須為XML中的組件分配一個ID,分配完ID后,系統(tǒng)會自動為每個控件分配一個ID號。3.2文本控件的功能與使用方法下面來修改activity_my.xml文件,即在TextView中添加屬性android:id,1
<TextView2
android:id="@+id/text"3
android:layout_width="wrap_content"4
android:layout_height="wrap_content"5
android:textColor="#ffff000"/>
第2行代碼的android:id是設(shè)置或者引用一個資源ID號,該屬性的值是@+id/text,表示為TextView分配一個ID,ID的值為text。3.2文本控件的功能與使用方法XML中的元素標(biāo)簽都是成對出現(xiàn),即有開始標(biāo)簽也有結(jié)束標(biāo)簽。構(gòu)成標(biāo)簽的方式有兩種:
第一種方式為“<標(biāo)簽>…</標(biāo)簽>”,這類標(biāo)簽表示該標(biāo)簽內(nèi)還可以再嵌套其他標(biāo)簽,
如<LinearLayout>…</LinearLayout>標(biāo)簽,在此標(biāo)簽中還嵌套了TextView;
第二種方式為“<標(biāo)簽…/>”,此類標(biāo)簽表示該標(biāo)簽中不可以再嵌套其他標(biāo)簽。3.2文本控件的功能與使用方法3、EditText的XML使用TextView了解后,學(xué)習(xí)EditText就相對比較簡單,EditText只是在TextView的基礎(chǔ)上進(jìn)行擴(kuò)展和增強(qiáng)。還是以項(xiàng)目為例,切換到activity_my.xml的代碼視圖,并在此基礎(chǔ)上添加EditText,3.2文本控件的功能與使用方法3、EditText的XML使用1 <TextView2 android:id="@+id/text"3 android:textColor="#ffff00"/>4 5 <EditText6 android:id="@+id/edit"7 android:layout_width="match_parent"8 android:layout_height="wrap_content"9 android:hint="未輸入時的提示字符"10 android:inputType="number"/>3.2文本控件的功能與使用方法第5行代碼表示在UI中添加一個EditText控件第6行代碼表示為EditText添加一個ID,為以后被Java調(diào)用做準(zhǔn)備。第7~8行代碼表示設(shè)置EditText的寬度和高度第9行代碼用于設(shè)置EditText在用戶沒有輸入文字時顯示的提示信息。第10行代碼用于設(shè)置鍵盤的類型,本例中把它設(shè)為數(shù)字類型的鍵盤。3.2文本控件的功能與使用方法3、EditText的XML使用以上便是對如何在UI中添加一個EditText的方法。從本例中讀者不難發(fā)現(xiàn)EditText控件的添加和TextView控件的添加極為類似,EditText只是有少數(shù)一些屬性上進(jìn)行添加以此增加其功能,但這里依然有幾點(diǎn)需要向讀者說明:3.2文本控件的功能與使用方法3、EditText的XML使用1)在設(shè)置android:layout_width或android:layout_height時Android提供個三個屬性值供開發(fā)者選擇“fill_parent”、“match_parent”和“wrap_content”,其中“fill_parent”屬性和“match_parent”屬性在效果是一致的,但是Google建議使用“match_parent”,因此通常都使用“match_parent”和“wrap_content”來設(shè)置控件的寬和高。2)inputtype的類型除了數(shù)字類型的鍵盤外還有許多種,
如文本鍵盤(text),郵件地址鍵盤(textEmailAddress)和電話鍵盤(phone)等,如圖3.2文本控件的功能與使用方法3、EditText的XML使用2)inputtype的類型除了數(shù)字類型的鍵盤外還有許多種,
如文本鍵盤(text),郵件地址鍵盤(textEmailAddress)和電話鍵盤(phone)等,如圖3.2文本控件的功能與使用方法3.2.4、EditText的Java使用如果需要在Java代碼中使用控件時就必須為該控件定義一個ID號,因此在上節(jié)中為EditText聲明了一個“edit”的ID,其后在編譯完成后就會在R.java中產(chǎn)生一個對應(yīng)的序列號。此后就可以通過findViewById()得到所需的控件。因?yàn)镋ditText和TextView在本質(zhì)上存在一定的相似性,所以對EditText的常用操作也是通過與TextView一樣的setText()和getText()來設(shè)置和得到EditText中的文字3.2文本控件的功能與使用方法4、EditText的Java使用代碼修改完成后,在AndroidSutdio窗口上邊的“Run”中選中“Run‘a(chǎn)pp’”,并單擊鼠標(biāo)左鍵來運(yùn)行項(xiàng)目,得到的最終結(jié)果如圖3-7所示。3.3按鈕控件的功能與使用方法
常見的按鈕控件有五種第一種是按鈕(Button)第二種是圖片按鈕(ImageButton)第三種是多選按鈕(CheckBox)第四種是單選按鈕(RadioButton)第五種是狀態(tài)開關(guān)按鈕(ToggleButton)3.3按鈕控件的功能與使用方法
1、Button與ImageButton的XML使用Android的體系結(jié)構(gòu)中Button繼承于TextView,而ImageButton繼承于ImageView,雖然這兩個控件繼承于不同的控件,但是Button和ImageButton都是用于完成用戶的點(diǎn)擊按鈕時的onClick事件。在AndroidStudio中創(chuàng)建Android項(xiàng)目,切換布局文件/res/layout/activity_main.xml到代碼視圖,并修改代碼如下:3.3按鈕控件的功能與使用方法1、Button與ImageButton的XML使用1 <LinearLayout2 android:orientation="vertical">3 <Button4 android:id="@+id/button"5 android:layout_width="wrap_content"6 android:layout_height="wrap_content"7 android:text="普通按鈕"/>3.3按鈕控件的功能與使用方法1、Button與ImageButton的XML使用8 <ImageButton9 android:id="@+id/imagebutton"10 android:layout_width="wrap_content"11 android:layout_height="wrap_content"12 android:src="@drawable/button_icon"13 android:background="#000000"/>14 </LinearLayout>3.3按鈕控件的功能與使用方法
第3行和第8行代碼表示在UI界面中添加一個Button和ImageButton。
第7行代碼中的“android:text”是Button控件中非常常用的屬性,用于為Button添加按鈕文字為“普通按鈕”。
第12行代碼的“android:src”是ImageButton控件中非常常用的屬性,用于設(shè)定ImageButton的圖片。
第13行代碼的“android:background”用來設(shè)置ImageButton的背景顏色為黑色,并且為完全透明。
3.3按鈕控件的功能與使用方法設(shè)置背景可以使用控件的background屬性,background屬性值的格式通常有4種,分別為“#rgb”、“#argb”、“#rrggbb”和“#aarrggbb”,其中“a”就表示透明度,取值范圍也是從0~255,0表示完全透明,255表示不透明。所以在本例中把ImageButton的background屬性值設(shè)為#000000就可以使背景完全透明3.3按鈕控件的功能與使用方法2、Button與ImageButton的Java使用Button和ImageButton除了在XML中創(chuàng)建方法非常相似外,在Java代碼中的使用也是非常相似,其用戶點(diǎn)擊的響應(yīng)函數(shù)都為onClick()。3.3按鈕控件的功能與使用方法2、Button與ImageButton的Java使用切換到“src”目錄下java文件,在onCreate()函數(shù)中完成Button、ImageButton和EditText這3個控件的關(guān)聯(lián),具體代碼如下:1 publicclassMainActivityextendsActivity{2 privateButtonnormalButton;3 privateImageButtonimageButton;4 privateEditTexteditText;5 publicvoidonCreate(BundlesavedInstanceState){3.3按鈕控件的功能與使用方法2、Button與ImageButton的Java使用6 super.onCreate(savedInstanceState);7 setContentView(R.layout.activity_main);8 normalButton=(Button)findViewById(R.id.button);9 imageButton=(ImageButton)findViewById(R.id.imagebutton);10editText=(EditText)findViewById(R.id.edit);11 }12 }3.3按鈕控件的功能與使用方法2、Button與ImageButton的Java使用當(dāng)關(guān)聯(lián)的代碼都完成后,接下來就要在第10行代碼之后實(shí)現(xiàn)Button和ImageButton的單擊事件,1 normalButton.setOnClickListener(newOnClickListener(){2 publicvoidonClick(Viewv)3 editText.setText("普通按鈕的響應(yīng)事件");4 }});5 imageButton.setOnClickListener(newOnClickListener(){ 6publicvoidonClick(Viewv){7 editText.setText("圖片按鈕的響應(yīng)事件");8 }});3.3按鈕控件的功能與使用方法第1行代碼用于為Button設(shè)置一個OnClickListener的監(jiān)聽注冊函數(shù)。只有當(dāng)Button設(shè)置了監(jiān)聽注冊函數(shù),其才能響應(yīng)用戶的單擊事件。而隨后的onClickListener()函數(shù)就是為注冊函數(shù)注冊一個監(jiān)聽器,在這個監(jiān)聽器中用于事件用戶點(diǎn)擊時的處理過程。第2~4行代碼是Button的用戶單擊事件的處理函數(shù),在本例中當(dāng)用戶單擊Button時在EditText中顯示“普通按鈕的響應(yīng)事件”。3.3按鈕控件的功能與使用方法3.3.3、CheckBox的XML使用CheckBox即多選按鈕,允許用戶在一組選項(xiàng)中進(jìn)行單選和多選。CheckBox在UI中的創(chuàng)建方案依然類似前面控件的創(chuàng)建方法,3.3按鈕控件的功能與使用方法3.3.3CheckBox的XML使用1 <LinearLayout2 android:orientation="vertical">3 <CheckBox4 android:id="@+id/meat"5 android:layout_width="match_parent"6 android:layout_height="wrap_content"7 android:text="肉類"8 android:onClick="onCheckboxClicked"3.3按鈕控件的功能與使用方法3.3.3、CheckBox的XML使用9 android:checked="true"/>10 <CheckBox11 android:id="@+id/cheese"12 android:layout_width="match_parent"13 android:layout_height="wrap_content"14 android:text="芝士"15 android:onClick="onCheckboxClicked"/>16 </LinearLayout>3.3按鈕控件的功能與使用方法3.3.3CheckBox的XML使用第3~7行代碼表示在UI中添加一個CheckBox,并設(shè)置該CheckBox的ID和大小,最后設(shè)置CheckBox中的文字。第8行代碼是設(shè)置單擊該CheckBox的響應(yīng)事件,這是除了在Java中定義用戶單擊事件外的另一種設(shè)置用戶單擊事件的方法,具體使用方法在隨后的章節(jié)中詳細(xì)說明。第9行代碼是設(shè)置CheckBox為默認(rèn)選中。3.3按鈕控件的功能與使用方法3.3.4、CheckBox的Java使用之前例子中,使用的響應(yīng)事件都是由系統(tǒng)提供的,具有特定函數(shù)名的響應(yīng)函數(shù),實(shí)際上,Android也提供了自定義響應(yīng)函數(shù)名的方法來響應(yīng)用戶事件。使用系統(tǒng)響應(yīng)函數(shù)目前都是放在onCreate中進(jìn)行定義和實(shí)現(xiàn),而使用自定義的響應(yīng)函數(shù)則需要把響應(yīng)函數(shù)放在Activity中作為一個成員函數(shù)來使用,同時這個Activity必須包含這個控件,3.3按鈕控件的功能與使用方法4、CheckBox的Java使用public
void
onCheckboxClicked(Viewview){2 booleanchecked=((CheckBox)view).isChecked();34 switch(view.getId()){5 caseR.id.meat:6 if(checked){7 editText.setText("肉類");8 }else{9 editText.setText("");10 }11 break;3.3按鈕控件的功能與使用方法4、CheckBox的Java使用12 caseR.id.cheese:13 if(checked){14 editText.setText("芝士");15 }else{16 editText.setText("");17 }18 break;19 }20 }3.3按鈕控件的功能與使用方法3.3.4、CheckBox的Java使用第1行用于添加CheckBox的自定義響應(yīng)函數(shù),其中view表示當(dāng)前點(diǎn)擊的控件。第2行中首先把View強(qiáng)制轉(zhuǎn)換為CheckBox,然后保存CheckBox的狀態(tài)至checked。第4行中通過view.getId()函數(shù)就可以得到用戶所點(diǎn)擊控件的ID號。第6~9行用于實(shí)現(xiàn)點(diǎn)擊CheckBox在EditText中顯示文字的功能。通過checked變量就可以在EditText中設(shè)置對應(yīng)的文字。3.3按鈕控件的功能與使用方法3.3.5、RadioButton的XML使用RadioButton的功能正好與CheckBox相反,用于在一組選項(xiàng)進(jìn)行單項(xiàng)選擇,因此RadioButton經(jīng)常與表示一組選項(xiàng)的RadioGroup一起使用,即當(dāng)用戶在已經(jīng)設(shè)定的一組RadioButton中選擇時只能選擇其中的一項(xiàng)。3.3按鈕控件的功能與使用方法3.3.5、RadioButton的XML使用1 <RadioGroup2 android:id="@+id/radiogroup"3 android:layout_width="wrap_content"4 android:layout_height="wrap_content"5 android:orientation="horizontal">6 <RadioButton7 android:id="@+id/radiobutton1"8 android:layout_width="wrap_content"9 android:layout_height="wrap_content"10 android:checked="true"11 android:text=“Male”/>3.3按鈕控件的功能與使用方法第1行代碼表示在UI界面中定義一個RadioGroup容器用于包含一組RadioButton組件。第2行代碼用于設(shè)定RadioGroup的ID號,使該組件可以在Java代碼中被使用。第5行代碼設(shè)置在RadioGroup中RadioButton的排列方式為橫向排列。第6~10行代碼表示在RadioGroup中定義的RadioButton組件,并設(shè)定其高度、寬度以及顯示的文字。3.3按鈕控件的功能與使用方法3.3.6、RadioButton的Java使用在使用RadioButton時常用的方法有三種:一、在XML中為每個RadioButton設(shè)置一個onClick的函數(shù),然后在Activity的成員函數(shù)中實(shí)現(xiàn)二、為每個RadioButton綁定一個onClickListener的監(jiān)聽器,然后通過監(jiān)聽器來響應(yīng)用戶的點(diǎn)擊事件3.3按鈕控件的功能與使用方法6、RadioButton的Java使用三、由于一組RadioButton屬于一個RadioGroup,因此可以通過RadioGroup中的監(jiān)聽事件來判斷RadioButton是否有被點(diǎn)擊,從而處理用戶的選擇事件。本節(jié)主要講述如何實(shí)現(xiàn)第三種用戶響應(yīng)事件的方法。3.3按鈕控件的功能與使用方法3.3.6、RadioButton的Java使用在AndroidStudio中打開項(xiàng)目中的“src”目錄中的MainActivity.java,并在其中onCreate函數(shù)中添加如下代碼。
RadioGroupradioGroup=(RadioGroup)findViewById(R.id.radiogroup);radioGroup.setOnCheckedChangeListener(newOnCheckedChangeListener(){3.3按鈕控件的功能與使用方法3.3.6、RadioButton的Java使用
@Overridepublic
void
onCheckedChanged(RadioGroupgroup,intcheckedId){ //TODOAuto-generatedmethodstub
switch(checkedId){
caseR.id.maleradio: editText.setText("男");
break;3.3按鈕控件的功能與使用方法6、RadioButton的Java使用
caseR.id.femaleradio: editText.setText("女");
break;
default:
break; }}});3.3按鈕控件的功能與使用方法6、RadioButton的Java使用第1行代碼表示通過findViewById得到XML中定義的RadioGroup控件。第2行用于向RadioGroup注冊一個監(jiān)聽器,并在這個監(jiān)聽器中完成用戶選擇響應(yīng)函數(shù)的代碼。第3行是一個用戶選擇變更的響應(yīng)函數(shù),onCheckedChanged函數(shù)有兩個參數(shù)第一個參數(shù)group:當(dāng)前選擇的是哪個RadioGroup,第二個參數(shù)checkedId:用戶在當(dāng)前這個RadioGroup中選擇的RadioButton的ID。第4~12行代碼通過一個switch語句來判斷用戶選擇是哪一個RadioButton,然后通過所選擇的RadioButton來修改EditText中的文字。3.4時間和日期控件的功能與使用方法
Android系統(tǒng)中時間和日期的控件總共有兩大類:AnalogClock和DigitalClock控件;DatePicker和TimePicker;本節(jié)主要向讀者展示這四個控件的基本使用方法。3.4時間和日期控件的功能與使用方法3.4.1
AnalogClock與DigitalClock的XML使用AnalogClock和DigitalClock的使用非常簡單,由于這兩個控件的時間值都是由系統(tǒng)決定的,因此在使用時只需要在布局文件的XML中創(chuàng)建即可,無需任何的Java代碼的添加。打開“l(fā)ayout”目錄下的activity_main文件,并添加如下代碼:3.4時間和日期控件的功能與使用方法3.4.1
AnalogClock與DigitalClock的XML使用1<AnalogClock2android:layout_width="wrap_content"3 android:layout_height="wrap_content"/>4 <DigitalClock5 android:layout_width="wrap_content"6 android:layout_height="wrap_content"7 android:textSize="14pt"/>3.4時間和日期控件的功能與使用方法1、AnalogClock與DigitalClock的XML使用第1~6行代碼分別定義了一個模擬時鐘和數(shù)字使用,并設(shè)置各個控件的寬和高。第7行代碼定義了數(shù)字時鐘的文字大小,除此之外還可以通過定義textColor屬性來設(shè)置文字顏色。以上便是AnalogClock和DigitalClock的使用3.4時間和日期控件的功能與使用方法3.4.2
DatePicker與TimerPicker的XML使用DatePicker和TimerPicker是Android系統(tǒng)中用于設(shè)定時間和日期的控件,其中DatePicker控件在Android4.0中會自動產(chǎn)生一個日歷功能,因此如果只需要顯示日期選擇時就要在布局文件中對DatePicker控件進(jìn)行特別的設(shè)定3.4時間和日期控件的功能與使用方法3.4.2DatePicker與TimerPicker的XML使用在布局文件中對DatePicker控件進(jìn)行特別的設(shè)定,效果如圖修改activity_main.xml文件,并添加如下代碼:3.4時間和日期控件的功能與使用方法2、DatePicker與TimerPicker的XML使用1 <DatePicker2 android:id="@+id/datePicker"3 android:layout_width="wrap_content"4 android:layout_height="wrap_content"5 android:calendarViewShown="false"/>6 <TimePicker7 android:id="@+id/timePicker"8 android:layout_width="wrap_content"9 android:layout_height="wrap_content"/>3.4時間和日期控件的功能與使用方法2、DatePicker與TimerPicker的XML使用<EditText11 android:id="@+id/userInfo"12 android:layout_width="match_parent"13 android:layout_height="wrap_content"14 android:textSize="12sp"/>3.4時間和日期控件的功能與使用方法2、DatePicker與TimerPicker的XML使用第1~5行代碼用于在UI中定義DatePicker控件。其中第5行代碼中calendarViewShown屬性用于設(shè)置Calendar是否顯示,在本例中該屬性值為false,因此當(dāng)DatePicker控件顯示時,只顯示日期信息,而不顯示日歷。第6~9行代碼表示在UI中定義一個TimePicker控件,并設(shè)定其高度和寬度,以及把TimePicker設(shè)為水平居中。第10~14行代碼表示在UI中添加一個ID為“userInfo”的EditText控件,同時設(shè)定其字體大小為12sp。3.4時間和日期控件的功能與使用方法3.4.3、DatePicker與TimerPicker的Java使用在Java代碼中使用DatePicker控件時主要掌握init()函數(shù)的使用,在該函數(shù)中會有日期改變時的事件響應(yīng)函數(shù)和年、月、日參數(shù)的設(shè)定。而TimerPicker控件使用時則需要重點(diǎn)掌握時間改變時的處理事件onTimeChanged()。打開“src”目錄下的MainActivity.java文件,并在其中添加代碼如下:3.4時間和日期控件的功能與使用方法3.4.3、DatePicker與TimerPicker的Java使用public
classMainActivityextendsActivity{
privateDatePickerdatePicker;
...
private
intyear,month,day,hour,minute;
@Override
protected
void
onCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ...3.4時間和日期控件的功能與使用方法3.4.3DatePicker與TimerPicker的Java使用Calendarcalendar=Calendar.getInstance(); year=calendar.get(Calendar.YEAR); month=calendar.get(Calendar.MONTH); ... datePicker.init(year,month,day,newOnDateChangedListener(){3.4時間和日期控件的功能與使用方法3.4.3DatePicker與TimerPicker的Java使用
@Override public
void
onDateChanged(DatePickerview,intyear,intmonthOfYear,intdayOfMonth){ //TODOAuto-generatedmethodstub MainActivity.this.year=year; ... showDate(year,month,day,hour,minute); } });3.4時間和日期控件的功能與使用方法3.4.3、DatePicker與TimerPicker的Java使用timePicker.setOnTimeChangedListener(newOnTimeChangedListener(){ @Override
public
void
onTimeChanged(TimePickerview,inthourOfDay,intminute){ //TODOAuto-generatedmethodstub MainActivity.this.hour=hourOfDay; MainActivity.this.minute=minute; showDate(year,month,day,hour,minute); } }); }}3.4時間和日期控件的功能與使用方法3.4.3DatePicker與TimerPicker的Java使用第3行用于記錄當(dāng)前時間的年、月、日、小時、分鐘。第8行代碼用于得到一個Calendar對象,這里需要注意的是,Calendar對象不是通過new關(guān)鍵字得到的,而是通過Calendar的靜態(tài)成員函數(shù)getInstance()得到的。第12~19行代碼調(diào)用init()函數(shù)來初始化DatePicker對象,同時為DatePicker對象創(chuàng)建日期的響應(yīng)函數(shù)onDateChanged()。第20~28行代碼用于為TimePicker對象設(shè)置一個時間變動的監(jiān)聽函數(shù),時間發(fā)生變化就會觸發(fā)該函數(shù)。以上就是TimePicker和DatePicker控件在XML以及Java中的使用,3.5界面布局管理器的使用
3.5.1布局文件的使用創(chuàng)建布局文件類似于Web頁面中的HTML元素,具有一定層次性。每一個布局文件都必須要包含一個根元素,這個根元素可以是一個View,也可以是ViewGroup。當(dāng)定義了根元素后,就可以添加任意的布局對象或者UI組件作為子元素,從而構(gòu)建出一個具有層次性的布局。3.5界面布局管理器的使用
3.5.1布局文件的使用例如下面這是一個XML文件中利用縱向布局來排列一個TextView和Button:1<LinearLayout2 android:orientation="vertical">3 <TextView4 android:text="Hello,IamaTextView"/>5 <Button6 android:text="Hello,IamaButton"/>7 </LinearLayout>3.5界面布局管理器的使用
3.5.1布局文件的使用當(dāng)XML文件創(chuàng)建完成后,就可以在Java中進(jìn)行載入,每一個XML布局文件都被編譯到資源文件中,然后在Activity.onCreate()函數(shù)中通過setContentView()實(shí)現(xiàn)布局文件的加載,載入的參數(shù)形式為R.layout.layout_file_name。3.5界面布局管理器的使用
3.5.2
線性布局線性布局是AndroidUI中使用最為頻繁的一種,使用類LinearLayout進(jìn)行管理。LinearLayout屬于ViewGroup,因此在LinearLayout中可以包含任意多個子視圖,而這些視圖在LinearLayout管理下所有的子元素都是按照垂直或者水平方向進(jìn)行一個挨著一個緊密排列。3.5界面布局管理器的使用
3.5.2線性布局接下來就請讀者在AndroidStudio中創(chuàng)建項(xiàng)目“3_04_LayoutControls”,并打開“res”目錄下的activity_main.xml文件,并在其中修改代碼如下:1 <LinearLayoutxmlns:android=""2 xmlns:tools=""3 android:layout_width="match_parent"4 android:layout_height="match_parent"5 android:orientation="vertical">3.5界面布局管理器的使用
3.5.2
線性布局7 <!--線性布局1_垂直布局-->8 <LinearLayout9 android:layout_width="match_parent"10 android:layout_height="wrap_content"11 android:orientation="vertical12 <Button13 android:layout_width="wrap_content"14 android:layout_height="wrap_content"15 android:text="垂直1"/>3.5界面布局管理器的使用
3.5.2
線性布局<Button17 android:layout_width="wrap_content"18 android:layout_height="wrap_content"19 android:text="垂直2"/>20 <Button21 android:layout_width="wrap_content"22 android:layout_height="wrap_content"23 android:text="垂直3"/>24 </LinearLayout>25 <!--線性布局2_水平布局-->26 <LinearLayout27 android:layout_width="match_parent"28 android:layout_height="wrap_content"29 android:orientation="horizontal">
3.5界面布局管理器的使用
3.5.2
線性布局30 <Button31 android:layout_width="wrap_content"32 android:layout_height="wrap_content"33 android:text="水平1"/>34 <Button35 android:layout_width="wrap_content"36 android:layout_height="wrap_content"37 android:text="水平2"/>38 <Button39 android:layout_width="wrap_content"40 android:layout_height="wrap_content"41 android:text="水平3"/>42 </LinearLayout>43 </LinearLayout>3.5界面布局管理器的使用
3.5.2
線性布局第5行代碼表示該界面的總體布局為垂直布局。第11行和第29行代碼表示兩模塊分別采用線性布局中的垂直布局和水平布局。從以上代碼可以看出LinearLayout除了自身表示線性布局外,還可以在其中再嵌套線性布局,這就是前面所說的“容器”的作用,其實(shí)除了可以嵌套線性布局,在后面的內(nèi)容中讀者會發(fā)現(xiàn)可以嵌套任意布局。3.5界面布局管理器的使用
3.5.2
線性布局線性布局中最為常用的三個屬性:Orientation:
表示線性布局的方向,即水平方向還是垂直方向Weight:
表示每個組件所占用空間的比例,如果有3個weight均為1的組件,那么這些組件所占空間分別為1/3、1/3、1/3,即把空間進(jìn)行三等分Gravity:
表示布局管理器內(nèi)部組件的對齊方式,當(dāng)使用多種對齊時,則使用“|”作為間隔3.5界面布局管理器的使用
3.5.2線性布局<LinearLayoutxmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<!--線性布局3_gravity--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:gravity="right">......</LinearLayout>3.5界面布局管理器的使用
3.5.2
線性布局
<!--線性布局1_weight--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"
android:layout_weight="1"android:text="水平1"/>3.5界面布局管理器的使用
3.5.2
線性布局<Button
android:layout_width="0dp"android:layout_height="wrap_content"
android:layout_weight="1"android:text="水平2"/><Button
android:layout_width="0dp"android:layout_height="wrap_content"
android:layout_weight="1"android:text="水平3"/></LinearLayout></LinearLayout>3.5界面布局管理器的使用
3.5.2
線性布局第11行代碼設(shè)定LinearLayout布局的內(nèi)部組件的對齊方式為右對齊。第20、25、30行代碼設(shè)定組件的寬度為0,這是三等分組件的前提條件。第22、27、32行代碼設(shè)定各組件的權(quán)重為1,即每個組件都占用1/3,從而完成了三等分。3.5界面布局管理器的使用3.5.2
線性布局
線性布局中的weight和gravity的使用
垂直和水平布局3.5界面布局管理器的使用
3.5.3表格布局表格布局使用TableLayout進(jìn)行管理,在繪制表格時不需要聲明表格的列數(shù)和行數(shù),而是通過TableRow來添加表格的行.通過TableRow中定義的組件個數(shù)來自動計算表格列數(shù)。因此在繪制表格時如果有3行,則需要添加3個TableRow。3.5界面布局管理器的使用
3.5.3表格布局在項(xiàng)目中添加一個新的布局文件activity_table.xml,并添加代碼如下:1
<TableLayout2 android:layout_width="match_parent"3 android:layout_height="wrap_content">4 <!--添加第一行-->5 <TableRow>6 <TextView7 android:layout_width="wrap_content"8 android:layout_height="wrap_content"9 android:text="用戶名:"/>
3.5界面布局管理器的使用
3.5.3表格布局10 <EditText11 android:layout_width="match_parent"12 android:layout_height="wrap_content"13 android:hint="請輸入用戶名"/>14 </TableRow>15 <!--添加第二行-->16 <TableRow>17 <TextView18 android:layout_width="wrap_content"19 android:layout_height="wrap_content"20 android:text="密碼:"/>3.5界面布局管理器的使用
3.5.3表格布局21 <EditText22 android:layout_width="match_parent"23 android:layout_height="wrap_content"24 android:hint="請輸入密碼"/>25 </TableRow>26 </TableLayout>第1行代碼用于在一個線性布局中添加一個TableLayout的表格布局。3.5界面布局管理器的使用
3.5.5表格布局第5行和第6行代碼用于為表格添加兩行,并在兩行中分別添加兩列,放置TextView和EditText。運(yùn)行的效果如圖所示3.5界面布局管理器的使用
3.5.3表格布局由于在表格布局中默認(rèn)情況下根據(jù)內(nèi)容來控制單元格的寬度,在右邊留有了一片空白區(qū)域。除了常規(guī)的屬性外,還有3個屬性最為常用,見表:表3-1TableLayout屬性及說明3.5界面布局管理器的使用
3.5.4相對布局相對布局(RelativeLayout):
是在繼線性布局和表格布局之后另一個常用的布局方法。相對布局的特點(diǎn):
是能夠通過組件和組件之間的關(guān)系來確定組件的位置,即如果組件A的位置在組件B的左邊,那么在使用相對布局時就需要先定義組件B,然后才能定義組件A。3.5界面布局管理器的使用
3.5.4相對布局子組件與父組件的位置關(guān)系XML屬性名說明android:layout_centerHotizontal控制組件是否位于水平居中android:layout_centerVertical控制組件是否位于垂直居中android:layout_centerInParent控制組件是否位于中央android:layout_alignParentButton控制組件是否位于底部android:layout_alignParentLeft控制組件是否位于左邊android:layout_alignParentRight控制組件是否位于右邊android:layout_alignParentTop控制組件是否位于上部3.5界面布局管理器的使用
3.5.4相對布局組件與組件的位置關(guān)系XML屬性名說明android:layout_toRightOf控制指定組件位于指定ID的右邊android:layout_toLeftOf控制指定組件位于指定ID的左邊android:layout_above控制指定組件位于指定ID的上方android:layout_below控制指定組件位于指定ID的下方android:layout_alignTop控制指定組件位于指定ID的上邊界對齊android:layout_alignBottom控制指定組件位于指定ID的下邊界對齊android:layout_alignLeft控制指定組件位于指定ID的左邊界對齊android:layout_alignRight控制指定組件位于指定ID的右邊界對齊3.5界面布局管理器的使用
3.5.4、相對布局從上表可以看出這些特有的屬性分為兩大類
第一種是子組件和父組件之間的關(guān)系,
它們值只有兩個true和false;
第二種是組件和組件之間的關(guān)系,
它們的值是另一個組件ID的應(yīng)用;因此在使用時必須先要為每個組件定義一個ID。3.5界面布局管理器的使用
3.5.4相對布局利用相對布局繪制一個登錄界面來闡釋使用這些屬性的方法:1 <!--嵌套一個相對布局-->2 <RelativeLayout3 android:layout_width="match_parent"4 android:layout_height=“wrap_content”>3.5界面布局管理器的使用
3.5.4相對布局5 <TextView6 android:id="@+id/userName"7 android:layout_width="wrap_content"8 android:layout_height="wrap_content"9 android:text="用戶名:"/>10 <!--layout_below定義了EditText相對于TextView在其下方-->11 <EditText12 android:id="@+id/userEdit"13 android:layout_width="match_parent"14 android:layout_height="wrap_content"15 android:layout_below="@id/userName"16 android:hint="請輸入用戶名"/>3.5界面布局管理器的使用
3.5.4相對布局17<TextView18 android:id="@+id/passwd"19 android:layout_width="wrap_content"20 android:layout_height="wrap_content"21 android:layout_below="@id/userEdit"22 android:text="密碼:"/>23 <EditText24 android:id="@+id/passwdEdit"25 android:layout_width="match_parent"26 android:layout_height="wrap_content"27 android:layout_below="@id/passwd"28 android:hint="請輸入密碼"/>3.5界面布局管理器的使用
3.5.4相對布局29 <!--layout_alignParentRight定義了Button在其父組件的右邊-->30 <Button31 android:id="@+id/cancel"32 android:layout_width="wrap_content"33 android:layout_height="wrap_content"34 android:layout_below="@id/passwdEdit"35 android:layout_alignParentRight="true"36 android:text="取消"/>37 <!--layout_toLeftOf定義了Button在其cancel組件的左邊-->38 <Button39 android:id="@+id/ok"40 android:layout_width="wrap_content"41 android:layout_height="wrap_content"42 android:layout_below="@id/passwdEdit"43 android:layout_toLeftOf="@id/cancel"44 android:text="登錄"/>45 </RelativeLayout>3.5界面布局管理器的使用
3.5.4相對布局第15行代碼用于將用戶名輸入框設(shè)置在用戶名標(biāo)簽的下方。第35行代碼用于將取消按鈕設(shè)置在相對于父頁面的右邊,即整個頁面的右邊,同時將其設(shè)置在密碼輸入框的下方。第43行代碼用于將登錄按鈕設(shè)置在取消按鈕的左邊3.5界面布局管理器的使用
3.5.4相對布局這里需要注意的是:
最后的登錄和取消按鈕的設(shè)置,因?yàn)榈卿洶粹o是在相對于取消按鈕的左邊,所以必須先定義取消按鈕,最終的效果如圖所示。3.6Intent的概念及使用概念
Android中提供了一種Intent機(jī)制來協(xié)助應(yīng)用程序間、組件之間的交互與通信,Intent負(fù)責(zé)對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent不僅可用于應(yīng)用程序之間,也可用于應(yīng)用程序內(nèi)部的組件(如Activity、Service)之間的交互。3.6Intent的概念及使用概念
Intent的中文意思就是意圖、目的。與此概念相吻合,Intent在Android中起著一個“媒體中介”的作用,指出希望跳轉(zhuǎn)到的目的組件的相關(guān)信息,并實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的信息數(shù)據(jù)傳遞。3.6Intent的概念及使用SDK給出了Intent作用的表現(xiàn)形式為:1)通過startActivity()或 startActivityForResult()啟動一個Activity。2)通過startService()啟動一個服務(wù)Service,
或者通過bindService()和后臺服務(wù)進(jìn)行交互。3)通過sendBroadcast()、 sendOrderedBroadcast()、sendStickyBroadcast()函數(shù)在Android系統(tǒng)中發(fā)布廣播消息。3.6Intent的概念及使用Intent的兩種基本用法:一種是顯式的Intent,即在構(gòu)造Intent對象時就指定接收者;另一種是隱式的Intent,即Intent的發(fā)送者在構(gòu)造Intent對象時,并不知道接收者是誰,有利于降低發(fā)送者和接收者之間的耦合;3.6Intent的概念及使用當(dāng)一個意圖對象被一個意圖過濾器進(jìn)行匹配測試時,只有三個方面會被參考到:動作、數(shù)據(jù)(URI以及數(shù)據(jù)類型)和類別。3.6Intent的概念及使用(1)動作(Action)
一個意圖對象只能指定一個動作名稱,常見動作見表3-4,而一個過濾器可能列舉多個動作名稱。如果意圖對象或過濾器沒有指定任何動作:
一方面,如果過濾器沒有指定任何動作,那么將阻塞所有意圖,因此所有意圖都會測試失敗。
另一方面,只要過濾器包含至少一個動作,一個沒有指定動作的意圖對象也能自動通過這個測試。
3.6Intent的概念及使用3.6Intent的概念及使用3.6Intent的概念及使用(1)類別(Category)
對于一個能夠通過類別匹配測試的意圖,意圖對象中的類別必須匹配過濾器中的類別。
原則上一個沒有類別的意圖對象應(yīng)該總能夠通過匹配測試,而不管過濾器里有什么。但有一個例外,Android把所有傳給startActivity()的隱式意圖當(dāng)作它們包含至少一個類別ent.category.DEFAULT(CATEGORY_DEFAULT常量)。
3.6Intent的概念及使用(3)數(shù)據(jù)(Data)
當(dāng)一個意圖對象中的URI被用來和一個過濾器中的URI比較時,比較的是URI的各個組成部分。
當(dāng)然,一個過濾器中的路徑規(guī)格可以包含通配符,這樣只需要部分匹配即可。
3.7Activity的啟動和跳轉(zhuǎn)
在Android系統(tǒng)中,應(yīng)用程序一般都有多個ActivityIntent可以幫助實(shí)現(xiàn)不同Activity之間的切換和數(shù)據(jù)傳遞。Activity的跳轉(zhuǎn)啟動的方式主要有兩種:顯式啟動和隱式啟動。3.7Activity的啟動和跳轉(zhuǎn)
概念顯式啟動:必須在Intent中指明啟動的Activity所在的類隱式啟動:Android系統(tǒng)根據(jù)Intent的動作和數(shù)據(jù)來決定啟動哪一個Activity。也就是說,在隱式啟動時,Intent中只包含需要執(zhí)行的動作和所包含的數(shù)據(jù),而無須指明具體啟動哪一個Activity,選擇權(quán)由Android系統(tǒng)和最終用戶來決定。3.7Activity的啟動和跳轉(zhuǎn)
3.7.1兩種啟動和跳轉(zhuǎn)方式顯式:
使用Intent來顯式啟動Activity,首先要創(chuàng)建一個Intent對象,并為它指定當(dāng)前的應(yīng)用程序上下文以及要啟動的Activity這兩個參數(shù),然后把這個Intent對象作為參數(shù)傳遞給startActivity這個方法。1 Intentintent=newIntent(IntentDemo.this,ActivityToStart.class);2 startActivity(intent);3.7Activity的啟動和跳轉(zhuǎn)
3.7.1兩種啟動和跳轉(zhuǎn)方式隱式:
使用Intent來隱式啟動Activity,首先也要創(chuàng)建一個Intent對象,不需要指明需要啟動哪一個Activity(匹配的Activity可以是應(yīng)用程序本身的,也可以是Android系統(tǒng)內(nèi)置的,還可以是第三方應(yīng)用程序提供的),而由Android系統(tǒng)來決定,這樣有利于使用第三方組件,然后把這個Intent對象作為參數(shù)傳遞給startActivity這個方法。3.7Activity的啟動和跳轉(zhuǎn)
3.7.1兩種啟動和跳轉(zhuǎn)方式隱式:1 Uriuri=Uri.parse("");2 Intentintent=newIntent(Intent.ACTION_VIEW,uri);
3 startActivity(intent);3.7Activity的啟動和跳轉(zhuǎn)
3.7.2帶值跳轉(zhuǎn)方式3.7.1節(jié)中介紹了Activity啟動和跳轉(zhuǎn)的兩種方式,這兩種方式都是不帶值進(jìn)行跳轉(zhuǎn),即沒有把第一個Activit
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度橋梁欄桿采購合同模板6篇
- 2025年度口腔診所投資合作與風(fēng)險分擔(dān)合同3篇
- 二零二五版材料采購合同補(bǔ)充協(xié)議:技術(shù)創(chuàng)新共享2篇
- 二零二五版抵押借款合同與借款合同簽訂流程與風(fēng)險防范3篇
- 二零二五版國有房產(chǎn)出售合同(智慧社區(qū)共建協(xié)議)3篇
- 2025年度餐飲業(yè)中央廚房租賃合同3篇
- 二零二五年度35KV變電站電氣設(shè)備技術(shù)改造合同3篇
- 二零二五年房地產(chǎn)項(xiàng)目鄉(xiāng)村振興戰(zhàn)略合作開發(fā)合同3篇
- 二零二五版班組分包道路養(yǎng)護(hù)合同3篇
- 2025版金融產(chǎn)品股權(quán)及債權(quán)轉(zhuǎn)讓與風(fēng)險管理合同3篇
- 公務(wù)員考試工信部面試真題及解析
- GB/T 15593-2020輸血(液)器具用聚氯乙烯塑料
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評分 表格
- 員工崗位能力評價標(biāo)準(zhǔn)
- 定量分析方法-課件
- 朱曦編著設(shè)計形態(tài)知識點(diǎn)
評論
0/150
提交評論