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