ANDROID用戶界面.ppt
《ANDROID用戶界面.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《ANDROID用戶界面.ppt(91頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
ANDROID用戶界面,英蓓特培訓(xùn)中心2012.07,主要內(nèi)容,用戶界面基礎(chǔ)用戶界面初探用戶界面布局用戶界面控件用戶界面菜單,用戶界面基礎(chǔ),內(nèi)容一,,用戶界面,界面如同人的面孔,具有吸引用戶的直接優(yōu)勢(shì)…,用戶界面,用戶界面(UserInterface,UI)是系統(tǒng)和用戶之間進(jìn)行信息交換的媒介,實(shí)現(xiàn)信息的內(nèi)部形式與人類可以接受形式之間的轉(zhuǎn)換在計(jì)算機(jī)出現(xiàn)早期,批處理界面(1945-1968)和命令行界面(1969-1983)得到廣泛的使用目前,流行圖形用戶界面(GraphicalUserInterface,GUI),采用圖形方式與用戶進(jìn)行交互的界面未來(lái)的用戶界面將更多的運(yùn)用虛擬現(xiàn)實(shí)技術(shù),使用戶能夠擺脫鍵盤與鼠標(biāo)的交互方式,而通過(guò)動(dòng)作、語(yǔ)言,甚至是腦電波來(lái)控制計(jì)算機(jī),手機(jī)用戶界面,設(shè)計(jì)手機(jī)用戶界面應(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ī)律的用戶界面,避免出現(xiàn)凌亂、擁擠的用戶界面Android已經(jīng)解決了前兩個(gè)問(wèn)題:使用XML文件(布局文件)描述用戶界面;資源資源文件獨(dú)立保存在資源文件夾中;對(duì)界用戶面描述非常靈活,允許不明確定義界面元素的位置和尺寸,僅聲明界面元素的相對(duì)位置和粗略尺寸,手機(jī)用戶界面,設(shè)計(jì)手機(jī)用戶界面應(yīng)特別注意的問(wèn)題:手機(jī)的顯示區(qū)域小,不能有太豐富的展示效果,因此要求設(shè)計(jì)精簡(jiǎn)而不失表達(dá)能力。手機(jī)的操作主要依賴拇指,所以交互過(guò)程不能設(shè)計(jì)得太復(fù)雜,交互步驟不能太多,盡量設(shè)計(jì)多點(diǎn)快捷方式。不同型號(hào)的手機(jī)支持的圖片格式、聲音格式、動(dòng)畫格式不一樣,需要選擇盡可能通用的格式,或者針對(duì)不同的型號(hào)進(jìn)行配置選擇。不同型號(hào)的手機(jī)屏幕大小不一致,設(shè)置形狀不一致,因此需要考慮圖片的自適應(yīng)問(wèn)題和界面元素的布局問(wèn)題。,ANDROID用戶界面,Android用戶界面框架采用MVC(Model-View-Controller)模型提供了處理用戶輸入的控制器(Controller)顯示用戶界面和圖像的視圖(View),以及保存數(shù)據(jù)和代碼的模型(Model),ANDROID用戶界面,MVC模型MVC模型中的控制器能夠接受并響應(yīng)程序的外部動(dòng)作,如按鍵動(dòng)作或觸摸屏動(dòng)作等控制器使用隊(duì)列處理外部動(dòng)作,每個(gè)外部動(dòng)作作為一個(gè)獨(dú)立的事件被加入隊(duì)列中,然后Android用戶界面框架按照“先進(jìn)先出”的規(guī)則從隊(duì)列中獲取事件,并將這個(gè)事件分配給所對(duì)應(yīng)的事件處理函數(shù),ANDROID用戶界面框架,Android用戶界面框架采用視圖樹(shù)(ViewTree)模型Android用戶界面框架中的界面元素以一種樹(shù)型結(jié)構(gòu)組織在一起,稱為視圖樹(shù)Android系統(tǒng)會(huì)依據(jù)視圖樹(shù)的結(jié)構(gòu)從上至下繪制每一個(gè)界面元素。每個(gè)元素負(fù)責(zé)對(duì)自身的繪制,如果元素包含子元素,該元素會(huì)通知其下所有子元素進(jìn)行繪制,ANDROID視圖樹(shù),視圖樹(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)變化、用戶輸入和界面事件處理等功能View也是一個(gè)重要的基類,所有在界面上的可見(jiàn)元素都是View的子類ViewGroup是一種能夠承載含多個(gè)View的顯示單元ViewGroup功能:一個(gè)是承載界面布局;另一個(gè)是承載具有原子特性的重構(gòu)模塊,單線程用戶界面,單線程用戶界面在單線程用戶界面中,控制器從隊(duì)列中獲取事件和視圖在屏幕上繪制用戶界面,使用的都是同一個(gè)線程優(yōu)點(diǎn):處理函數(shù)具有順序性,能夠降低應(yīng)用程序的復(fù)雜程度,同時(shí)也能減低開(kāi)發(fā)的難度缺點(diǎn):如果事件處理函數(shù)過(guò)于復(fù)雜,可能會(huì)導(dǎo)致用戶界面失去響應(yīng),用戶界面初探,內(nèi)容二,,ANDROID應(yīng)用程序模型,Activity,如何實(shí)現(xiàn)ANDROID界面,Android界面布局Layout定義了界面中所有的元素、結(jié)構(gòu)和相互關(guān)系:使用XML文件描述界面布局在程序運(yùn)行時(shí)動(dòng)態(tài)添加或修改界面布局布局對(duì)象在程序中的調(diào)用:setContentView(…)從布局文件加載布局及控件findViewById(…)從資源中找到控件,ANDROIDXML布局文件,使用XML文件聲明界面布局的特點(diǎn)將程序的表現(xiàn)層和控制層分離在后期修改用戶界面時(shí),無(wú)需更改程序的源代碼用戶還能夠通過(guò)可視化工具直接看到所設(shè)計(jì)的用戶界面,有利于加快界面設(shè)計(jì)的過(guò)程,并且為界面設(shè)計(jì)與開(kāi)發(fā)帶來(lái)極大的便利性,簡(jiǎn)單的XML布局文件,線性布局,布局方向,控件,命名空間,控件資源ID,控件顯示內(nèi)容,android:id屬性:聲明了控件對(duì)象的ID,這個(gè)ID主要用于在代碼中引用這個(gè)控件對(duì)象“@+id/button1”表示所設(shè)置的ID值@表示后面的字符串是ID資源加號(hào)(+)表示需要建立新資源名稱,并添加到R.java文件中斜杠后面的字符串(button1)表示新資源的名稱如果資源不是新添加的,或?qū)儆贏ndroid框架的ID資源,則不需要使用加號(hào)(+),但必須添加Android包的命名空間,例如android:id="@android:id/empty",界面對(duì)象的常規(guī)屬性,android:id="@+id/button1",android:layout_width屬性:用來(lái)設(shè)置控件對(duì)象的寬度,fill_parent表示控件對(duì)象的寬度將等于父控件的寬度android:layout_height屬性:用來(lái)設(shè)置控件對(duì)象的高度,wrap_content表示控件對(duì)象的寬度只要能夠包含所顯示的字符串即可,界面對(duì)象的常規(guī)屬性,android:layout_width="fill_parent"android:layout_height="wrap_content",界面對(duì)象的常規(guī)屬性,Android中使用的單位(在布局文件中使用ddxx)px:表示屏幕實(shí)際的像素?cái)?shù)。例如,320*480的屏幕在橫向有320個(gè)象素,在縱向有480個(gè)象素。in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米,形容手機(jī)屏幕大小用的是屏幕的對(duì)角線長(zhǎng)度。mm:表示毫米,是屏幕的物理尺寸。pt:表示一個(gè)點(diǎn),是屏幕的物理尺寸,大小為1英寸的1/72。dp(密度獨(dú)立像素):也作dip,是一種基于屏幕密度的抽象單位?;久芏仁?60dpi,如果屏幕密度提高,則dp對(duì)應(yīng)的實(shí)際px數(shù)也會(huì)相應(yīng)的提高。sp(scale獨(dú)立像素):用于字體的一種基于屏幕密度的抽象單位。,android:layout_width=“120dp",界面對(duì)象的常規(guī)屬性,android:text屬性:用來(lái)設(shè)置控件對(duì)象上顯示的文字內(nèi)容,android:text="Button",引入資源,引入資源:將download.png文件拷貝到/res/drawable文件夾下在/res目錄上選擇Refresh新添加的文件將顯示在/res/drawable文件夾下R.java文件內(nèi)容也得到了更新否則提示無(wú)法找到資源的錯(cuò)誤,程序加載XML資源,通過(guò)調(diào)用方法:setContentView()可以實(shí)現(xiàn)對(duì)Layout布局資源的調(diào)用:,publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);},程序創(chuàng)建對(duì)象及引用,通過(guò)調(diào)用方法:findViewById()可以實(shí)現(xiàn)對(duì)控件對(duì)象的引用:,ButtonmyButton=(Button)findViewById(R.id.button1);myButton.setText("test");,可視化編輯器,作業(yè):在界面中添加一個(gè)按鈕,并且在程序中調(diào)用該按鈕資源,顯示文字“test”,用戶界面布局,內(nèi)容三,,ANDROID界面布局,Android界面布局Layout定義了界面中所有的元素、結(jié)構(gòu)和相互關(guān)系。,常用的布局對(duì)象,Android操作系統(tǒng)提供下列5種窗體布局:線性布局(LinearLayout)框架布局(FrameLayout)表格布局(TableLayout)相對(duì)布局(RelativeLayout)絕對(duì)布局(AbsoluteLayout),線性布局-LinearLayout,線性布局LinearLayout在線性布局中,所有的子元素都按照垂直或水平的順序在界面上排列如果垂直排列,則每行僅包含一個(gè)界面元素如果水平排列,則每列僅包含一個(gè)界面元素,Android:orientation=“vertical”或Android:orientation=“horizontal”,線性布局實(shí)例,,線性布局控件常用屬性,框架布局-FrameLayout,框架布局FrameLayout框架布局(FrameLayout)是最簡(jiǎn)單的界面布局,是用來(lái)存放一個(gè)元素的空白空間,且子元素的位置是不能夠指定的,只能夠放置在空白空間的左上角如果有多個(gè)子元素,后放置的子元素將遮擋先放置的子元素使用AndroidSDK中提供的層級(jí)觀察器(HierarchyViewer)進(jìn)一步分析界面布局,能夠?qū)τ脩艚缑孢M(jìn)行分析和調(diào)試,并以圖形化的方式展示樹(shù)形結(jié)構(gòu)的界面布局,框架布局-FrameLayout,在層級(jí)觀察器中獲得示例界面布局的樹(shù)形結(jié)構(gòu)圖,框架布局實(shí)例,,表格布局-TableLayout,表格布局TableLayout表格布局(TableLayout)也是一種常用的界面布局,它將屏幕劃分網(wǎng)格,通過(guò)指定行和列可以將界面元素添加的網(wǎng)格中網(wǎng)格的邊界對(duì)用戶是不可見(jiàn)的表格布局還支持嵌套,可以將另一個(gè)表格布局放置在前一個(gè)表格布局的網(wǎng)格中,也可以在表格布局中添加其他界面布局,例如線性布局、相對(duì)布局等等,表格布局-TableLayout,表格布局TableLayout,表格布局示意圖,表格布局效果圖,表格布局實(shí)例,,表格布局常用屬性,相對(duì)布局-RelativeLayout,相對(duì)布局RelativeLayout相對(duì)布局(RelativeLayout)是一種非常靈活的布局方式,能夠通過(guò)指定界面元素與其他元素的相對(duì)位置關(guān)系,確定界面中所有元素的布局位置特點(diǎn):能夠最大程度保證在各種屏幕類型的手機(jī)上正確顯示界面布局,相對(duì)布局實(shí)例,,相對(duì)布局常用屬性,絕對(duì)布局-AbsoluteLayout,絕對(duì)布局AbsoluteLayout絕對(duì)布局(AbsoluteLayout)能通過(guò)指定界面元素的坐標(biāo)位置,來(lái)確定用戶界面的整體布局絕對(duì)布局是一種不推薦使用的界面布局,因?yàn)橥ㄟ^(guò)X軸和Y軸確定界面元素位置后,Android系統(tǒng)不能夠根據(jù)不同屏幕對(duì)界面元素的位置進(jìn)行調(diào)整,降低了界面布局對(duì)不同類型和尺寸屏幕的適應(yīng)能力,布局的嵌套,布局的嵌套是指相同或者不同類型的布局之間可以嵌套使用,其目的是為了利用不同布局的特性,方便構(gòu)建我們想要得到的圖案,布局嵌套實(shí)例,,,用戶界面控件,內(nèi)容四,,ANDROID用戶界面控件,Android系統(tǒng)的界面控件有兩種:系統(tǒng)控件:是Android系統(tǒng)提供給用戶已經(jīng)封裝的界面控件。提供在應(yīng)用程序開(kāi)發(fā)過(guò)程中常見(jiàn)功能控件。系統(tǒng)控件更有利于幫助用戶進(jìn)行快速開(kāi)發(fā),同時(shí)能夠使Android系統(tǒng)中應(yīng)用程序的界面保持一致性定制控件:是用戶獨(dú)立開(kāi)發(fā)的控件,或通過(guò)繼承并修改系統(tǒng)控件后所產(chǎn)生的新控件。能夠?yàn)橛脩籼峁┨厥獾墓δ芑蚺c眾不同的顯示需求方式常見(jiàn)的系統(tǒng)控件包括TextView、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、Progress、ListView和TabHost、Dialog、Toast、Notification等,ANDROID控件類型分類,常用控件:TextView、EditText、Button選擇控件:CheckBox、RadioButton、Spinner進(jìn)度條控件:Progress對(duì)話框控件:Dialog消息提示控件:Toast,常用控件:TextView、EditText,TextView和EditTextTextView是一種用于顯示字符串的控件EditText則是用來(lái)輸入和編輯字符串的控件,,TextView,,EditText,,程序名,EditText實(shí)際上是一個(gè)具有編輯功能的TextView,控件布局實(shí)例,,常用函數(shù):setText();getText();,常用控件:Button、ImageButton,Button和ImageButtonButton是一種按鈕控件,用戶能夠在該控件上點(diǎn)擊,隨后引發(fā)相應(yīng)的事件處理函數(shù)ImageButton用以實(shí)現(xiàn)能夠顯示圖像功能的控件按鈕,控件布局實(shí)例,,也可以通過(guò)程序?qū)崿F(xiàn)ImageButton上圖片的顯示:myImageButton.setImageResource(R.drawable.download);,按鈕控件的監(jiān)聽(tīng),按鈕響應(yīng)點(diǎn)擊事件:添加點(diǎn)擊事件的監(jiān)聽(tīng)器,finalButtonmyButton=(Button)findViewById(R.id.button1);myButton.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubmyButton.setText("我按了Button一下");}});,監(jiān)聽(tīng)器,消息響應(yīng)函數(shù),按鈕控件的監(jiān)聽(tīng),finalButtonmyButton=(Button)findViewById(R.id.button1);finalImageButtonmyImageButton=(ImageButton)findViewById(R.id.imagebutton1);View.OnClickListenerbuttonListener=newView.OnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubswitch(v.getId()){caseR.id.button1:myButton.setText("我按了Button一下");return;caseR.id.imagebutton1:myButton.setText("我按了ImageButton一下");return;}}};myButton.setOnClickListener(buttonListener);myImageButton.setOnClickListener(buttonListener);,選擇控件:CheckBox、RadioButton,CheckBox和RadioButtonCheckBox:多選控件RadioButton:?jiǎn)芜x控件RadioGroup是RadioButton的承載體,程序運(yùn)行時(shí)不可見(jiàn),在每個(gè)RadioGroup中,用戶僅能夠選擇其中一個(gè)RadioButton,CheckBox控件實(shí)例,,finalCheckBoxmyCheckBox=(CheckBox)findViewById(R.id.checkbox01);myCheckBox.setText("我的狀態(tài)是:"+myCheckBox.isChecked());myCheckBox.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubmyCheckBox.setText("我的狀態(tài)是:"+myCheckBox.isChecked());}});,RadioButton控件實(shí)例,,RadioButton控件實(shí)例,finalTextViewmyTextView=(TextView)findViewById(R.id.TextView01);finalRadioGroupmyRadioGroup01=(RadioGroup)findViewById(R.id.RadioGroup01);finalRadioButtonmyRadioButton=(RadioButton)findViewById(myRadioGroup01.getCheckedRadioButtonId());myTextView.setText(myRadioButton.getText().toString());myRadioGroup01.setOnCheckedChangeListener(newOnCheckedChangeListener(){publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){//TODOAuto-generatedmethodstubmyTextView.setText(((RadioButton)findViewById(checkedId)).getText().toString());}});,選擇控件:Spinner,SpinnerSpinner是一種能夠從多個(gè)選項(xiàng)中選一選項(xiàng)的控件,類似于桌面程序的組合框(ComboBox),但沒(méi)有組合框的下拉菜單,而是使用浮動(dòng)菜單為用戶提供選擇,Spinner控件實(shí)例,,Spinner控件實(shí)例,finalSpinnermySpinner=(Spinner)findViewById(R.id.Spinner01);Listlist=newArrayList();list.add("Spinner1");list.add("Spinner2");list.add("Spinner3");ArrayAdapteradapter=newArrayAdapter(this,android.R.layout.simple_spinner_item,list);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);mySpinner.setAdapter(adapter);,進(jìn)度條控件:Progress,ProgressProgress可以用于某些操作的可視化指示器。顯示給用戶一個(gè)代表操作進(jìn)行了多少的進(jìn)度條。用戶可以隨著進(jìn)度向前推進(jìn)改變進(jìn)度條的量。,Progress控件實(shí)例,,Progress控件實(shí)例,privatebooleanstate=false;privatestaticintcount=0;finalButtonmyButton1=(Button)findViewById(R.id.button1);finalButtonmyButton2=(Button)findViewById(R.id.button2);finalProgressBarmyProgressBar1=(ProgressBar)findViewById(R.id.progressBar1);finalProgressBarmyProgressBar2=(ProgressBar)findViewById(R.id.progressBar2);myProgressBar1.setMax(100);myProgressBar2.setVisibility(View.GONE);View.OnClickListenerbuttonListener=newView.OnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubswitch(v.getId()){caseR.id.button1:count++;if(count==100){count=0;myProgressBar1.setProgress(0);}myProgressBar1.setProgress(count);break;caseR.id.button2:state=!state;if(state){myButton2.setText("停止");myProgressBar2.setVisibility(View.VISIBLE);}else{myButton2.setText("運(yùn)行");myProgressBar2.setVisibility(View.GONE);}break;}}};myButton1.setOnClickListener(buttonListener);myButton2.setOnClickListener(buttonListener);,對(duì)話框控件:Dialog,Dialog是android開(kāi)發(fā)過(guò)程中最常用到的組件之一,通常是在當(dāng)前activity前面出現(xiàn)的小窗口。Dialog通常是用來(lái)通知打斷用戶,執(zhí)行直接跟應(yīng)用程序進(jìn)度相關(guān)的短暫任務(wù)(比如進(jìn)度條或者登錄框)。Dialog可分為以下幾種類型:警告對(duì)話框:Alertialog進(jìn)度對(duì)話框:ProgressDialog日期選擇對(duì)話框:DatePickerDialog時(shí)間選擇對(duì)話框:TimePickerDialog自定義對(duì)話框:從Dialog繼承,各種Dialog,AlertDialog,AlertDialog是對(duì)Dialog的擴(kuò)展,它有能力構(gòu)建絕大多數(shù)的對(duì)話框用戶界面,建議使用這種類型的對(duì)話框。它不需要在XML中定義,用代碼生成。,AlertDialog控件實(shí)例,myButton1.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubAlertDialog.Builderbuilder=newAlertDialog.Builder(HelloWorldActivity.this);builder.setMessage("確認(rèn)退出嗎?");builder.setTitle("提示");builder.setPositiveButton("確認(rèn)",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){//TODOAuto-generatedmethodstubHelloWorldActivity.this.finish();}});builder.setNegativeButton("取消",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){//TODOAuto-generatedmethodstubdialog.cancel();}});builder.create().show();}});,消息提示控件:Toast,Toast是在窗口表面彈出的通知消息。它僅僅是填充消息需要的空間大小,用戶當(dāng)前的activity保留可見(jiàn)性和可交互性。通知會(huì)自動(dòng)的褪掉,它不會(huì)接受用戶交互事件。,Toast控件實(shí)例,myButton1.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubContextcontext=getApplicationContext();CharSequencetext="HelloToast!";intduration=Toast.LENGTH_SHORT;Toasttoast=Toast.makeText(context,text,duration);//toast.setGravity(Gravity.TOP|Gravity.LEFT,0,0);toast.show();}});,用戶界面菜單,內(nèi)容五,,菜單,菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開(kāi)發(fā)人員提供了易于使用的編程接口Android系統(tǒng)支持三種菜單選項(xiàng)菜單(Menu類)子菜單(SubMenu類)快捷菜單(ContextMenu類),菜單,選項(xiàng)菜單選項(xiàng)菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單打開(kāi)方式:通過(guò)“菜單鍵”(MENUkey)打開(kāi)選項(xiàng)菜單分類圖標(biāo)菜單(IconMenu)擴(kuò)展菜單(ExpandedMenu),菜單,圖標(biāo)菜單圖標(biāo)菜單能夠同時(shí)顯示文字和圖標(biāo)的菜單,最多支持6個(gè)子項(xiàng)圖標(biāo)菜單不支持單選框和復(fù)選框,菜單,擴(kuò)展菜單擴(kuò)展菜單是在圖標(biāo)菜單子項(xiàng)多于6個(gè)時(shí)才出現(xiàn),通過(guò)點(diǎn)擊圖標(biāo)菜單最后的子項(xiàng)“More”才能打開(kāi)擴(kuò)展菜單是垂直的列表型菜單,不能夠顯示圖標(biāo)支持單選框和復(fù)選框,菜單,重要函數(shù),菜單,選項(xiàng)菜單使用重載Activity的onCreateOptionMenu()函數(shù),才能夠在Android應(yīng)用程序中使用選項(xiàng)菜單初次使用選項(xiàng)菜單時(shí),會(huì)調(diào)用onCreateOptionMenu()函數(shù),用來(lái)初始化菜單子項(xiàng)的相關(guān)內(nèi)容,設(shè)置菜單子項(xiàng)自身的子項(xiàng)的ID和組ID菜單子項(xiàng)顯示的文字和圖片等,選項(xiàng)菜單,選項(xiàng)菜單,finalstaticintMENU_DOWNLOAD=Menu.FIRST;finalstaticintMENU_UPLOAD=Menu.FIRST+1;@OverridepublicbooleanonCreateOptionsMenu(Menumenu){menu.add(0,MENU_DOWNLOAD,0,"下載設(shè)置");menu.add(0,MENU_UPLOAD,1,"上傳設(shè)置");returntrue;},Menu.FIRST(整數(shù)類型,值為1)定義第一個(gè)菜單子項(xiàng),以后的菜單子項(xiàng)僅需在Menu.FIRST增加相應(yīng)的數(shù)值即可第7行代碼是onCreateOptionsMenu()函數(shù)返回值,函數(shù)的返回值類型為布爾型返回true將顯示在函數(shù)中設(shè)置的菜單,否則不能夠顯示菜單,選項(xiàng)菜單,Menu:add()添加菜單子項(xiàng)add()函數(shù)的語(yǔ)法,groupId:組ID,用以批量的對(duì)菜單子項(xiàng)進(jìn)行處理和排序itemId:子項(xiàng)ID,是每一個(gè)菜單子項(xiàng)的唯一標(biāo)識(shí),通過(guò)子項(xiàng)ID使應(yīng)用程序能夠定位到用戶所選擇的菜單子項(xiàng)order:定義菜單子項(xiàng)在選項(xiàng)菜單中的排列順序title:菜單子項(xiàng)所顯示的標(biāo)題,MenuItemandroid.view.Menu.add(intgroupId,intitemId,intorder,CharSequencetitle),選項(xiàng)菜單,添加菜單子項(xiàng)的圖標(biāo)和快捷鍵:setIcon()函數(shù)setShortcut()函數(shù),MENU_DOWNLOAD菜單設(shè)置圖標(biāo)和快捷鍵的代碼第2行代碼中使用了新的圖像資源,用戶將需要使用的圖像文件拷貝到/res/drawable目錄下setShortcut()函數(shù)第一個(gè)參數(shù)是為數(shù)字鍵盤設(shè)定的快捷鍵setShortcut()函數(shù)第二個(gè)參數(shù)是為全鍵盤設(shè)定的快捷鍵,且不區(qū)分字母的大小寫,menu.add(0,MENU_DOWNLOAD,0,"下載設(shè)置").setIcon(R.drawable.download).setShortcut(‘0’,’d’);,選項(xiàng)菜單,Activity::onPrepareOptionsMenu()動(dòng)態(tài)的添加、刪除菜單子項(xiàng),或修改菜單的標(biāo)題、圖標(biāo)和可見(jiàn)性等內(nèi)容onPrepareOptionsMenu()函數(shù)的返回值的含義與onCreateOptionsMenu()函數(shù)相同返回true則顯示菜單返回false則不顯示菜單,選項(xiàng)菜單,Activity::onOptionsItemSelected()菜單選擇事件,且該函數(shù)在每次點(diǎn)擊菜單子項(xiàng)時(shí)都會(huì)被調(diào)用下面的代碼說(shuō)明了如何通過(guò)菜單子項(xiàng)的子項(xiàng)ID執(zhí)行不同的操作,publicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){caseMENU_DOWNLOAD:Toast.makeText(getApplicationContext(),"DOWNLOAD",Toast.LENGTH_SHORT).show();returntrue;caseMENU_UPLOAD:Toast.makeText(getApplicationContext(),"UPLOAD",Toast.LENGTH_SHORT).show();returntrue;}returnfalse;},子菜單,子菜單(二級(jí)菜單)子菜單是能夠顯示更加詳細(xì)信息的菜單子項(xiàng)菜單子項(xiàng)使用了浮動(dòng)窗體的顯示形式,能夠更好適應(yīng)小屏幕的顯示方式,子菜單,子菜單重要函數(shù),子菜單,子菜單Android系統(tǒng)的子菜單使用非常靈活,可以在選項(xiàng)菜單或快捷菜單中使用子菜單,有利于將相同或相似的菜單子項(xiàng)組織在一起,便于顯示和分類子菜單不支持嵌套,不支持圖標(biāo)(快捷鍵支持的不好)子菜單的添加是使用addSubMenu()函數(shù)實(shí)現(xiàn),SubMenuuploadMenu=(SubMenu)menu.addSubMenu(0,MENU_UPLOAD,1,"上傳設(shè)置").setIcon(R.drawable.upload);uploadMenu.setHeaderIcon(R.drawable.upload);uploadMenu.setHeaderTitle("上傳參數(shù)設(shè)置");uploadMenu.add(0,SUB_MENU_UPLOAD_A,0,"上傳參數(shù)A");uploadMenu.add(0,SUB_MENU_UPLOAD_B,0,"上傳參數(shù)B");,快捷菜單,快捷菜單(contextmenu)快捷菜單同樣采用了動(dòng)態(tài)窗體的顯示方式,與子菜單的實(shí)現(xiàn)方式相同,但兩種菜單的啟動(dòng)方式卻截然不同啟動(dòng)方式:快捷菜單類似于普通桌面程序中的“右鍵菜單”,當(dāng)用戶點(diǎn)擊界面元素超過(guò)2秒后,將啟動(dòng)注冊(cè)到該界面元素的快捷菜單不支持快捷鍵和圖標(biāo)(實(shí)際支持?jǐn)?shù)字快捷鍵)使用方法:與使用選項(xiàng)菜單的方法非常相似,需要重載onCreateContextMenu()函數(shù)和onContextItemSelected()函數(shù)onCreateContextMenu()函數(shù)主要用來(lái)添加快捷菜單所顯示的標(biāo)題、圖標(biāo)和菜單子項(xiàng)等內(nèi)容,快捷菜單,快捷菜單重要函數(shù),快捷菜單,publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);TextViewmyTextView=(TextView)findViewById(R.id.textView1);registerForContextMenu(myTextView);}finalstaticintCONTEXT_MENU_1=Menu.FIRST;finalstaticintCONTEXT_MENU_2=Menu.FIRST+1;publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenuInfomenuInfo){menu.setHeaderTitle("快捷菜單標(biāo)題");menu.add(0,CONTEXT_MENU_1,0,"菜單項(xiàng)1");menu.add(0,CONTEXT_MENU_2,1,"菜單項(xiàng)2");}publicbooleanonContextItemSelected(MenuItemitem){switch(item.getItemId()){caseCONTEXT_MENU_1:Toast.makeText(getApplicationContext(),"菜單項(xiàng)1",Toast.LENGTH_SHORT).show();returntrue;caseCONTEXT_MENU_2:Toast.makeText(getApplicationContext(),"菜單項(xiàng)2",Toast.LENGTH_SHORT).show();returntrue;}returnfalse;},菜單(布局),菜單在布局中定義在Android系統(tǒng)中,菜單不僅能夠在代碼中定義,而且可以像界面布局一樣在XML文件中進(jìn)行定義使用XML文件定義界面菜單,將代碼與界面設(shè)計(jì)分類,有助于簡(jiǎn)化代碼的復(fù)雜程度,并且更有利于界面的可視化,菜單(布局)實(shí)例,在/res目錄下建立子目錄menu,并在menu下建立context_menu.xml文件,代碼如下,,菜單(布局)實(shí)例,publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);TextViewmyTextView=(TextView)findViewById(R.id.textView1);registerForContextMenu(myTextView);}@OverridepublicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenuInfomenuInfo){MenuInflaterinflater=getMenuInflater();inflater.inflate(R.menu.context_menu,menu);},,謝謝大家!,英蓓特培訓(xùn)中心培訓(xùn)講師:盧斯lusi@13327906618,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- ANDROID 用戶界面
鏈接地址:http://m.jqnhouse.com/p-3386550.html