




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Page 24.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 3豐富的可視化用戶界面組件。包括菜單、對話框、按鈕、下拉列表框等等,應(yīng)有盡有所有UI類的祖宗是View 其中又能夠放其他View的是ViewGroup,稱為布局容器-Layout。如LinearLayout等等 不能夠再放其他View的稱為組件Widget。如Button 這種設(shè)計是“23種設(shè)計模式中的組合模式” 類似于文件和文件夾的關(guān)系。 文件夾和普通文件都是文件。 普通文件中不能再放文件. 文件夾中可以放普通文
2、件,也可以再放文件夾Page 4Android.widgetAndroid.viewPage 5組合模式(又叫部分與整體模式)-類圖Page 6View和ViewGroup樹Page 7UI組件概覽-非類圖Page 8D:androidsdkdocsreferencepackages.htmlPage 9控制組件行為的兩種方式: 在XML布局文件中通過XML屬性進(jìn)行控制 在Java程序代碼中通過調(diào)用方式進(jìn)行控制Page 10View類的XML屬性、相關(guān)方法及說明(見文檔): view類的XML屬性相關(guān)方法.docPage 11項目例子(CodeView):Page 12項目例子(MixView
3、):Page 13onFinishInflate() 當(dāng)View中所有的子控件均被映射成xml后觸發(fā) onMeasure(int, int) 確定所有子元素的大小 onLayout(boolean, int, int, int, int) 當(dāng)View分配所有的子元素的大小和位置時觸發(fā) onSizeChanged(int, int, int, int) 當(dāng)view的大小發(fā)生變化時觸發(fā) onDraw(Canvas) 當(dāng)該組件將要繪制它的內(nèi)容時回調(diào)該方法進(jìn)行繪制onKeyDown(int, KeyEvent) 有按鍵按下后觸發(fā) onKeyUp(int, KeyEvent) 有按鍵按下后彈起時觸發(fā) o
4、nTrackballEvent(MotionEvent) 軌跡球事件 onTouchEvent(MotionEvent) 觸屏事件 onFocusChanged(boolean, int, Rect) 當(dāng)View獲取或失去焦點(diǎn)時觸發(fā) onWindowFocusChanged(boolean) 當(dāng)窗口包含的view獲取或失去焦點(diǎn)時觸發(fā) onAttachedToWindow() 當(dāng)view被附著到一個窗口時觸發(fā) onDetachedFromWindow() 當(dāng)view離開附著的窗口時觸發(fā)onWindowVisibilityChanged(int) 當(dāng)窗口中包含的可見的view發(fā)生變化時觸發(fā)Page
5、 14項目例子(CustomView)Page 154.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 16RegisterPage 17HTML中控件如何布局? *Page 18Java程序中(swing)控件如何布局? *Page 19Page 20常見布局方式: 線性布局LinearLayout 按照垂直或水平方向布局組件 幀布局FrameLayout 從屏幕的左上角坐標(biāo)布局組件 表格布局TableLayout 類似于 相對布局RelativeLayout 可以指定組件之
6、間的相對位置關(guān)系 絕對布局AbsoluteLayout 按照絕對坐標(biāo)來布局組件 不推薦使用Page 21線性布局LinearLayout 實(shí)例(LinearLayout4)Page 22線性布局LinearLayout 常用XML屬性及相關(guān)方法XML屬性相關(guān)方法說明Android:gravitysetGravity(int)設(shè)置布局管理器內(nèi)組件的對齊方式。該屬性支持top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip
7、_horizontal幾個屬性值。也可以同時指定多種對齊方式的組合,例如left|center_vertical表示出現(xiàn)在屏幕左邊,且垂直居中。Android:orientationsetOrientation(int)設(shè)置布局管理內(nèi)組件的排列方式,可以設(shè)置為horizontal(水平排列)、vertical(垂直排列)Page 23線性布局LinearLayout 實(shí)例-知識 屬性orientation用來設(shè)置線性布局的方向vertical -豎直方向horizontal水平方向 可結(jié)合html標(biāo)簽記憶 屬性gravity 用于設(shè)置內(nèi)容的對齊方式 居中center 水平居中center_ h
8、orizontal靠下bottom 屬性layout_width和layout_height 布局寬度和高度 match_parent(在android2.2 sdk8中用來取代fill_parent) wrap_content 也可以是具體的數(shù)值,如30px, 30pt等Page 24幀布局FrameLayout實(shí)例(FrameLayout)Page 25幀布局FrameLayout常用屬性及相關(guān)方法XML屬性相關(guān)方法說明Android:foregroundsetForeground(Drawable)設(shè)置該幀布局容器的前景圖像Android:froegroundGravitysetFore
9、groundGravity(int) 定義繪制前景圖像的gravity屬性Page 26幀布局FrameLayout實(shí)例關(guān)鍵代碼Page 27表格布局TableLayout實(shí)例(TableLayoutTest)Page 28相對布局RelativeLayout實(shí)例(RelativeLayoutTest)Page 29RelativeLayout.LayoutParams只能設(shè)為boolean值的屬性屬性說明android:layout_centerhorizontal控制該子組件是否位于布局容器的水平居中位置android:layout_centerVertical控制該子組件是否位于布局容器
10、的垂直居中位置android:layout_centerInParent控制該子組件是否位于布局容器的中央位置android:layout_alignParentBottom控制該子組件是否位于布局容器底端對齊android:layout_alignParentLeft控制該子組件是否位于布局容器左邊對齊android:layout_alignParentRight控制該子組件是否位于布局容器右邊對齊android:layout_alignParentTop控制該子組件是否位于布局容器頂端對齊Page 30RelativeLayout.LayoutParams只能設(shè)為其他UI組件的ID屬性說明
11、android:layout_toRightOf控制該子組件位于給出ID組件的右側(cè)android:layout_toLeftOf控制該子組件位于給出ID組件的左側(cè)android:layout_above控制該子組件位于給出ID組件的上方android:layout_below控制該子組件位于給出ID組件的下方android:layout_alignTop控制該子組件位于給出ID組件的上邊界對齊android:layout_alignBottom控制該子組件位于給出ID組件的下邊界對齊android:layout_alignLeft控制該子組件位于給出ID組件的左邊界對齊android:layo
12、ut_alignRight控制該子組件位于給出ID組件的右邊界對齊Page 31絕對布局AbsoluteLayout實(shí)例(AbsoluteLayout)Page 32課堂編程實(shí)現(xiàn)游戲:猜紅心 testgamePage 33綜合運(yùn)用 項目實(shí)例: RegisterPage 34綜合運(yùn)用 項目實(shí)例: RegisterLinearLayoutTableLayout各種控件FrameLayoutToggleButtonLinearLayout注冊取消Page 354.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理
13、4.9手機(jī)交互設(shè)計Page 36文本框(TextView)和編輯框(TextEdit)按鈕(Button)與圖片按鈕(ImageButton)單選按鈕(RadioButton)與復(fù)選框(CheckBox)狀態(tài)開關(guān)按鈕(ToggleButton)時鐘(AnalogClock和DigitalClock)圖像視圖(ImageView)Page 37Page 38TextView的XML屬性說明(大部分適用于EditText) TextView XML屬性.docPage 39TextView的項目實(shí)例 不同字體、不同顏色的文本、URL(TextView1)Page 40TextView的項目實(shí)例 帶
14、邊框、圖片的TextView(TextView2)Page 41TextView的項目實(shí)例 用戶友好的輸入界面(TextView3)Page 42項目實(shí)例 按鈕、圓形按鈕、帶文字的圖片按鈕(ButtonTest)Page 43項目實(shí)例 CheckButtonTestPage 44項目實(shí)例 ToggleButtonTestPage 45項目實(shí)例 ClockTestPage 46計數(shù)器組件:Chronometer ChronometerTestPage 47項目實(shí)例 ImageViewTestPage 484.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件
15、4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 49自動完成文本框類似于Google網(wǎng)頁搜索效果 項目實(shí)例演示:AutoCompleteTextViewTestPage 50常見XML屬性XML屬性相關(guān)方法說明android:completionHintsetcompletionHint(charSequence)設(shè)置出現(xiàn)在下拉菜單中的提示標(biāo)題android:compeltionThresholdsetThreshold(int)設(shè)置用戶至少輸入幾個字符才會顯示提示Android:dropDownHeightsetdropDownHeight(int)設(shè)置下拉菜單
16、的高度Android:dropDownHorizontalOffset設(shè)置下列菜單與文本框之間的水平偏移Android:dropDownVerticalOffset設(shè)置下列菜單與文本框之間的垂直偏移Android:dropDownWidthsetdropDownWidth(int)設(shè)置下拉菜單的寬度Android:popupBackgroundsetpopupBackgroundResource(int)設(shè)置下拉菜單的高度Page 51適配器(Adapter)(數(shù)據(jù)和視圖之間的橋梁)介紹Page 52適配器(Adapter)(數(shù)據(jù)和視圖之間的橋梁)介紹Page 53適配器(Adapter)(數(shù)
17、據(jù)和視圖之間的橋梁)介紹 ArrayAdapter ListAdapter BaseAdapter SimpleAdapter ExpandableListAdapter .Page 54自動完成文本框類似于Google網(wǎng)頁搜索效果 項目代碼分析:AutoCompleteTextViewTestPage 55項目實(shí)例:簡單例子 SpinnerTestPage 56項目實(shí)例:自定義 SpinnerTest2Page 57項目實(shí)例演示 DatePicker_TimePickerPage 58項目實(shí)例代碼分析 DatePicker_TimePickerPage 59項目實(shí)例 ProgressBarT
18、estPage 60項目實(shí)例演示 TabHostTestPage 61項目實(shí)例代碼分析 TabHostTest(繼承TabActivity) 在界面布局中定義TabHost組件,并為該組件定義該選項卡的內(nèi)容。 Activity繼承 TabActivity 調(diào)用TabActivity的 getTabHost() 方法獲取TabHost對象 通過TabHost對象來創(chuàng)建當(dāng)前選項卡、添加選項卡Page 62項目實(shí)例演示及代碼分析 ScrollViewTestPage 63列表視圖以垂直列表的方式顯示列表項。如:聯(lián)系人名單等。 實(shí)現(xiàn)方式1:使用ListView組建 實(shí)現(xiàn)方式2:繼承ListActivi
19、ty關(guān)鍵在于適配器Adapter 數(shù)據(jù)和顯示數(shù)據(jù)的視圖之間的橋梁 也指定了視圖的單個項的顯示樣式 如:new ArrayAdapter(context,單項的樣式,數(shù)據(jù)); 如果系統(tǒng)提供的Adapter不夠好,可以寫個類繼承BaseAdapterPage 64實(shí)例:改變分割條、基于數(shù)組的ListView ArrayAdapterListPage 65實(shí)例:基于ListActivity實(shí)現(xiàn)列表(如果一個窗口僅需要一個列表) ListActivityTestPage 66如果要顯示復(fù)雜的列表項,可以重寫B(tài)aseAdapter時提供的getView方法,但很麻煩!使用SimpleAdapter自定義
20、ListView的列表項。w 項目實(shí)例:SimpleAdapterTest SimpleAdapter對象Page 67項目實(shí)例 ExpandableListViewTestPage 68項目實(shí)例演示 GridViewTestPage 69GridView常用XML屬性XML屬性相關(guān)方法說明android:columnWidthsetcolumnWidth(int)設(shè)置列的寬度android:gravitysetGravity設(shè)置對齊方式android:horizontalSpacingsethorizontalSpacing(int)設(shè)置各元素之間的水平間距android:numColumn
21、ssetNumColumns(int)設(shè)置列數(shù)android:stretchModesetStretchMode(int)設(shè)置拉伸模式android:verticalSpacingsetVerticalSpacing(int)設(shè)置各元素之間的垂直間距Page 70圖片切換器ImageSwitcher 顯示哪張圖片 switcher.setImageResource( )。該方法源碼中將調(diào)用imageView.setImageResource( )。因此,需要提供ImageView給它. 如何提供?-給它一個視圖工廠!讓工廠來提供 switcher.setFactory(viewFacotry
22、); ViewFactory是一個接口。 實(shí)現(xiàn)接口,覆蓋makeView( )方法,在該方法中產(chǎn)生ImageViewPage 71項目實(shí)例代碼分析 GridViewTest(GridView和ImageSwitcher)Page 72項目例子演示 Chapter04_UI_gallaryPage 73水平顯示圖片圖片切換器ImageSwitcherPage 74Gallery常用的XML屬性及相關(guān)方法XML屬性相關(guān)方法說明Android:animationDurationsetAnimationDuration(int)設(shè)置列表項切換時的動畫持續(xù)時間Android:gravitysetGrav
23、ity(int)設(shè)置對齊方式Android:spacingsetSpacing(int)設(shè)置Gallery內(nèi)列表項的間距Android:unselectedAlphasetUnselectedAlpha(int)設(shè)置沒有選中的列表項的透明度Page 75畫廊Gallery 如何在畫廊中顯示一些圖片?關(guān)鍵在于提供恰當(dāng)?shù)倪m配器給它。 class MyImageAdapter extends BaseAdapter getView()方法-設(shè)置單個項如何顯示 選擇了畫廊中的某項,如何做處理?-監(jiān)聽器 gallery.setOnItemSelectedListener( )Page 764.1用戶界面
24、編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 77對話框程序運(yùn)行過程中的彈出窗口。分為四種: 警告對話框AlertDialog 進(jìn)度對話框ProgressDialog 日期選擇對話框DatePickerDialog 時間選擇對話框TimePickerDialogPage 78支持四種AlertDialog對話框及自定義對話框 帶消息、帶N個按鈕的提示對話框 帶列表、帶N個按鈕的提示對話框 帶多個單選列表項, N個按鈕的提示對話框 帶多個多選列表項, N個按鈕的提示對話框Page 79A
25、lertDialog實(shí)現(xiàn)方法(建造者模式) 實(shí)例化建造者AlertDialog.Builder 利用builder設(shè)置對話框的各種屬性setTitle(標(biāo)題)setMessage(消息)setCancelable(boolean b)設(shè)置是否可以取消setPositiveButton( )-設(shè)置”正面”按鈕,及點(diǎn)擊該按鈕的事件處理setNegativeButton( )-設(shè)置“反面”按鈕,及點(diǎn)擊該按鈕的事件處理多項-setItems(CharSequence items, DialogInterface.OnClickListener listener) 多項單選-setSingleChoic
26、eItems (CharSequence items, int checkedItem, DialogInterface.OnClickListener listener) AlertDialog dialog = builder.create( ); 創(chuàng)建(實(shí)例化)對話框 dialog.show( ); 顯示對話框Page 80創(chuàng)建簡單對話框 項目實(shí)例:DialogTestPage 81創(chuàng)建普通列表項對話框 項目實(shí)例:ListDialogPage 82創(chuàng)建單選列表對話框 項目實(shí)例:SingleChoiceDialogPage 83創(chuàng)建多選列表對話框 項目實(shí)例: MultiChoiceDial
27、ogPage 84創(chuàng)建自定義對話框項目實(shí)例: LoginDialog(自學(xué))Page 85項目實(shí)例演示: PopupWindowTestPage 86PopupWindowPopupWindow創(chuàng)建步驟創(chuàng)建步驟: 調(diào)用PopupWindow的構(gòu)造器構(gòu)建PopupWindow對象; 調(diào)用PopupWindow的showAsDropDown(View v)將PopupWindow作為V組件的下拉組件顯示出來;或調(diào)用PopupWindow的showAtLocation方法將PopupWindow在指定位置顯示出來。Page 87項目實(shí)例代碼分析: PopupWindowTestPage 88項目實(shí)例
28、演示和代碼分析: ProgressDialogPage 894.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 90提示信息當(dāng)用戶執(zhí)行某個操作后,自動顯示,過一會兒自動消失。實(shí)現(xiàn)方法: Toast.makeText(context,顯示的內(nèi)容,時間的長短).show(); context可以是Activity的實(shí)例或者用getApplicationContext( )得到 時間的長短為兩個常量Toast.LENGTH_LONG或者Toast.LENGTH_SHORTPage 9
29、1項目實(shí)例演示及代碼分析 ToastTestPage 924.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 93選項菜單Options Memu 單擊手機(jī)上的菜單鍵出現(xiàn)上下文菜單ContextMenu 顧名思義,與上下文(環(huán)境)有關(guān)。思想類似于Windows中的右鍵單擊彈出的快捷菜單。 操作時需要長時間按住某個東東不放。菜單的兒子-子菜單SubMenuPage 94項目實(shí)例演示及代碼分析 Menu01Page 95選項菜單實(shí)現(xiàn)方法 因?yàn)槭窃谀硞€屏幕(Activity)處,點(diǎn)擊
30、menu按鈕,出現(xiàn)的。 因此實(shí)現(xiàn)方式為覆蓋Activity的onCreateOptionsMenu(Menu menu)方法。 如果需要響應(yīng)菜單項被點(diǎn)擊(選擇),則還需要覆蓋onOptionsItemSelected(MenuItem item)方法。 在onCreateOptionsMenu()方法中產(chǎn)生Menu menu.add(int菜單組編號, int菜單項編號, int菜單項顯示次序, 菜單項標(biāo)題); SubMenu subMenu = menu.addSubMenu(標(biāo)題); subMenu.add(.) 使用XML菜單資源。菜單充氣者M(jìn)enuInflater將xml菜單資源充入m
31、enu。 inflater.inflate(resId,menu); Page 96項目實(shí)例演示及代碼分析 Menu02Page 97上下文菜單實(shí)現(xiàn)方法 因?yàn)槭窃谀硞€屏幕(Activity)處,長時間點(diǎn)擊某個View,而出現(xiàn)的。 因此實(shí)現(xiàn)方式為覆蓋Activity的onCreateContextMenu(.)方法。 將”某個View”和菜單綁定。在onCreate()方法中,registerForContextMenu(view); 如果需要響應(yīng)菜單項被點(diǎn)擊(選擇),則還需要覆蓋onContextItemSelected(MenuItem item)方法。 在onCreateContextMe
32、nu()方法中產(chǎn)生Menu和選項菜單一樣 menu.add(int菜單組編號, int菜單項編號, int菜單項顯示次序, 菜單標(biāo)題); SubMenu subMenu = menu.addSubMenu(標(biāo)題); subMenu.add(.) 使用XML菜單資源。菜單充氣者M(jìn)enuInflater將xml菜單資源沖入menu。 inflater.inflate(resId,menu); Page 98項目實(shí)例演示及代碼分析 Menu03Page 994.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4
33、.9手機(jī)交互設(shè)計Page 100Android的事件處理基于監(jiān)聽的事件處理基于回調(diào)的事件處理Handler消息傳遞機(jī)制Page 101基于監(jiān)聽的事件處理機(jī)制基于回調(diào)的事件處理機(jī)制Page 102事件處理機(jī)制(觀察者模式) 事件三要素 事件源(事件發(fā)生場所,如各個組件) 事件(通常是用戶的一次操作,點(diǎn)擊某個按鈕) 監(jiān)聽器(事件處理程序) 事件例子 生活中的實(shí)例: 張三上課打瞌睡,被陳老師發(fā)現(xiàn),命令他站起來聽課。 鼠標(biāo)點(diǎn)擊登錄按鈕,檢測用戶名文本框中填寫的用戶名是否合法。Page 103事件處理流程Page 104簡單事件處理例子:EventQs基于監(jiān)聽的事件處理模型的編程步驟(xml文件) xm
34、l中使用android:onClick或者類似的 屬性,指定函數(shù)名 android:onClick=onClick_Event“ 在activity中加入以下代碼:public void onClick_Event(View view) TextView textview = (TextView)findViewById(R.id.textView1);textview.setText(Button);基于監(jiān)聽的事件處理模型的編程步驟(代碼) 獲取普通界面組件(事件源),也就是被監(jiān)聽的對象 實(shí)現(xiàn)事件監(jiān)聽器類,該監(jiān)聽器類是一個特殊的Java類,必須實(shí)現(xiàn)一個XxxListener接口 調(diào)用事件源的
35、setXxxListener方法將事件監(jiān)聽器對象注冊給普通組件。Page 105事件和事件監(jiān)聽器 鍵盤事件需要獲取是哪個鍵觸發(fā)的事件 觸摸屏事件需要獲取事件發(fā)生的位置 Android會將事件信息封裝成XxxEvent對象,并把該對象作為參數(shù)傳給事件處理器 項目實(shí)例:planePage 106事件監(jiān)聽器接口類型 View.OnclickListener:單擊按鈕 View.OnCreateContextMenuListener:產(chǎn)生上下文菜單事件接口 View.onFocusChangeListener:焦點(diǎn)改變事件的監(jiān)聽器接口 View.OnkeyListener:按鍵事件的事件監(jiān)聽器接口 V
36、iew.OnLongClickListener:長單擊事件的事件監(jiān)聽器接口 View.OnTouchListener:觸摸屏事件的事件監(jiān)聽器接口Page 107事件監(jiān)聽器接口實(shí)現(xiàn) 內(nèi)部類形式:將事件監(jiān)聽器類定義成當(dāng)前類的內(nèi)部類 外部類形式:當(dāng)事件監(jiān)聽器類定義成一個外部類 Activity本身作為事件監(jiān)聽器:讓Activity本身實(shí)現(xiàn)監(jiān)聽器接口,并實(shí)現(xiàn)事件處理方法 匿名內(nèi)部類形式:使用匿名內(nèi)部類創(chuàng)建事件監(jiān)聽器對象 直接綁定到標(biāo)簽(bingingTag)Page 108事件監(jiān)聽器接口實(shí)現(xiàn):內(nèi)部類形式 大部分采用,主要優(yōu)點(diǎn)是可以自由訪問當(dāng)前外部類內(nèi)的所有組件。 項目實(shí)例:EventQsPage 10
37、9事件監(jiān)聽器接口實(shí)現(xiàn):外部類形式,比較少見 事件監(jiān)聽器通常屬于特定的GUI界面,定義成外部類不利于提供程序的內(nèi)聚性 外部類形式的事件的監(jiān)聽器不能自由訪問創(chuàng)建 GUI 界面的類中的組件,編程不夠簡潔Page 110事件監(jiān)聽器接口實(shí)現(xiàn): Activity本身作為事件監(jiān)聽器 造成程序結(jié)構(gòu)混亂,很少采用public class ActivityListener extends Activity implements OnClickListener EditText show;Button bn;public void onCreate(Bundle savedInstanceState) super.
38、onCreate(savedInstanceState);setContentView(R.layout.main);show = (EditText)findViewById(R.id.show);bn = (Button)findViewById(R.id.bn);/直接使用Activity作為事件監(jiān)聽器bn.setOnClickListener(this);/實(shí)現(xiàn)事件處理方法public void onClick(View v) show.setText(bn按鈕被單擊了!);Page 111事件監(jiān)聽器接口實(shí)現(xiàn):匿名內(nèi)部類形式 廣泛采用public class AnonymousList
39、ener extends Activity EditText show;Button bn;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);show = (EditText)findViewById(R.id.show);bn = (Button)findViewById(R.id.bn);/直接使用Activity作為事件監(jiān)聽器bn.setOnClickListener(new OnClickListener() /
40、實(shí)現(xiàn)事件處理方法public void onClick(View v) show.setText(bn按鈕被單擊了!); );匿名類是不能有名稱的類,所以沒辦法引用它們。必須在創(chuàng)建時,作為new語句的一部分來聲明它們。Page 112回調(diào)機(jī)制與監(jiān)聽機(jī)制 監(jiān)聽機(jī)制一種委托方式(系統(tǒng)監(jiān)聽事件的觸發(fā)) 回調(diào)機(jī)制中事件源與事件監(jiān)聽器是一致的,UI組件提供事件處理的回調(diào)方法,開發(fā)人員重寫該方法即可。Page 113View的回調(diào)方法 Boolean onKeyDown(int keyCode,KeyEvent e) Boolean onKeyLongPress(int keyCode,KeyEvent
41、e) Boolean onKeyShortcut(int keyCode,keyEvent e) Boolean onKeyUp(int keyEvent event) Boolean onTouchEvent(MotionEvent e) Boolean onTrackballEvent(MotionEvent e)Page 114項目實(shí)例演示及代碼分析 CallbackHandlerPage 115主要解決多線程問題: Android平臺不允許Activity新啟動的線程訪問該Activity里的界面組件,導(dǎo)致新啟動的線程無法改變界面組件的屬性。 游戲中經(jīng)常需要新啟動的線程周期性改變界面組
42、件屬性 借助Handler的消息機(jī)制來實(shí)現(xiàn)Page 116多線程基礎(chǔ)Thread mThread = new Thread()Overridepublic void run()timeConsumingProcess();mThread.start()Page 117Handler類簡介: 主要作用: 在新啟動線程中發(fā)送消息 在主線程中獲取、處理消息 項目實(shí)例:HandlerTest1 void handleMessage(Message msg) final boolean hasMessages(int what) final boolean hasMessages(int w,Objec
43、t o) sendEmptyMessage(int w) Final boolean sendEmptyMessageDelayed(int w,long l) Final boolean sendMessageDelayed(Message msg,long l)Page 1184.1用戶界面編程與視圖(View)組件4.2布局管理器4.3基本界面組件4.4高級界面組件4.5對話框4.6消息提示4.7菜單4.8事件處理4.9手機(jī)交互設(shè)計Page 119手機(jī)交互設(shè)計概述手機(jī)交互設(shè)計出現(xiàn)的問題手機(jī)軟件導(dǎo)航的交互特點(diǎn)手機(jī)軟件平臺與硬件的關(guān)系手機(jī)交互規(guī)范android手機(jī)交互規(guī)范設(shè)計例子iPhone
44、 App的特點(diǎn)及基本設(shè)計方法手機(jī)UI設(shè)計檢測要素手機(jī)產(chǎn)品框架層設(shè)計優(yōu)秀手機(jī)設(shè)計界面欣賞Page 120手機(jī)交互設(shè)計三部曲: 第一:手機(jī)軟件導(dǎo)航的交互特點(diǎn) 第二:手機(jī)軟件平臺與硬件的關(guān)系 第三:交互規(guī)范Page 121手機(jī)與web界面交互設(shè)計的區(qū)別:WebWeb手機(jī)手機(jī) 輸出取決于顯示器相對明顯更小的屏幕輸入鼠標(biāo)/鍵盤操作拇指/食指/觸摸操作風(fēng)格受到瀏覽器和網(wǎng)絡(luò)性能限制受到硬件和操作平臺限制使用場景家中、辦公室、咖啡店等室內(nèi)場所室內(nèi)、戶外、車中、單手、橫豎屏Page 122由輸出性能牽扯到的問題: 每屏無法顯示足夠多的內(nèi)容 沒有足夠空間放置全局導(dǎo)航條 沒有足夠空間利用空隙和各種輔助線來表達(dá)區(qū)塊之
45、間的關(guān)系Page 123由輸入性能牽扯到的問題: 按鍵機(jī)型需要焦點(diǎn)和方向鍵、OK鍵以及左右軟鍵、刪除鍵等硬件之間的配合 觸摸機(jī)型尤其需要注意區(qū)分可否點(diǎn)擊,并且可點(diǎn)擊的部分需要能準(zhǔn)確的釋義因?yàn)槿鄙賥eb界面中的懸停提示Page 124由使用場景和狀態(tài)牽扯到的問題: 界面需要能適應(yīng)比web更多的典型場景,例如光線的強(qiáng)弱與使用者走動等情況,所以設(shè)計者需要一定程度脫離自己的角度去嘗試包括對比度和字號等能否滿足使用需求Page 125總結(jié): 手機(jī)的操作比web頁面復(fù)雜,需了解其所基于的機(jī)型的硬鍵情況才能確定如何控制; 手機(jī)軟件需要與web不同的導(dǎo)航形式,空間所限; 手機(jī)軟件在操作步驟的縮減方面需要傾注更
46、多的精力,每屏空間所限; 手機(jī)軟件需要在控件/組件釋義方面傾注更多的精力,硬鍵和邏輯所限。Page 126Page 127觀者可以對比下面幾幅圖,試圖辨別在不同的視覺保真度上,哪個界面屬于哪個手機(jī): Page 128Page 129Page 130以硬件區(qū)分手機(jī)類型: 僅以物理硬鍵控制操作的機(jī)型(后文簡稱按鍵機(jī)) 主要以觸摸方式操作的機(jī)型(通常包含主頁、掛機(jī)等物理鍵) 物理硬鍵齊全,但支持觸摸操作的機(jī)型(外形和按鍵機(jī)型一樣)Page 131主流的可安裝第3方應(yīng)用的軟件平臺: 塞班s60(第3和第5版) Windows Mobile for PPC Android Iphone OS Java(
47、目前有非常巨大的智能和非智能機(jī)型群是包含java平臺的) 其他還有很多,諸如plam os、UIQ等Page 132從設(shè)計第三方應(yīng)用的角度看,大致可以濃縮成以下幾個版本的設(shè)計規(guī)范: S60第3版有一套比較經(jīng)典和嚴(yán)謹(jǐn)?shù)囊?guī)范 。另外S60第5版雖然是觸摸屏機(jī)型,但是對于交互設(shè)計師的工作來說兩者區(qū)別并不巨大,只是把OK鍵替換換成了點(diǎn)擊,以及零碎的一些變化。 Java版事實(shí)上由于左右物理控制鍵和方向鍵、OK鍵是按鍵機(jī)型的普遍配置,S60第3版規(guī)范的適用 范圍是非常廣泛的,稍微修改一點(diǎn)就可以適 用于Java平臺。區(qū)別在于手機(jī)的“刪除”和“返回”兩個物理硬鍵的配置不太一致,所以需要統(tǒng)一將右下角的命令默認(rèn)為
48、“返回”,在編輯文本時,臨時變?yōu)椤?刪除”。這樣犧牲了某些機(jī)型的某些操作的效率,保證了這個整體的機(jī)型都可使用。 Page 133從設(shè)計第三方應(yīng)用的角度看,大致可以濃縮成以下幾個版本的設(shè)計規(guī)范: Iphone OSIphone的出現(xiàn)一舉打破了之前若干平臺固有的設(shè)計定勢,硬鍵和操作模式都精簡了許多。 不過其缺少固定的menu模式,這對第三方軟件的設(shè)計來說是個巨大的挑戰(zhàn),要么需要很大程度上脫離iphone自身的設(shè)計規(guī)范體系,要么就極端精簡功能。 Android跟從了一些iphone中的經(jīng)典手勢,操作和頁面布局風(fēng)格上相對保守一點(diǎn),保留了menu和back兩個硬鍵,雖然不夠獨(dú)樹一幟,但是在功能和設(shè)計之間
49、做的了一個不錯的平衡,對于第三方應(yīng)用來說,這是一個可以有寬廣發(fā)揮空間的平臺。Page 134 Page 1351 .硬鍵和手勢控制2.菜單3.焦點(diǎn)4.彈出框5.列表6.其它Page 1361 .硬鍵和手勢控制: S60第3版Page 1371 .硬鍵和手勢控制: AndroidPage 1381 .硬鍵和手勢控制: phonePage 1391 .硬鍵和手勢控制: 以上硬鍵和手勢對于操作的控制,需要我們在設(shè)計前有個十分清晰的認(rèn)識,并且整個團(tuán)隊達(dá)成一致,如有精力則需要專門寫到設(shè)計規(guī)范文檔中。硬鍵控制是沒有什么改動余地的,兩款觸摸機(jī)型可以對手勢適當(dāng)進(jìn)行取舍,畢竟有些應(yīng)用用不到所有的手勢,能精簡操作
50、最好。Page 1402.菜單 S60第3版Page 1412.菜單 S60第3版的菜單是由左軟鍵或OK鍵調(diào)出,需要定義以下幾點(diǎn): 如何收回 背景是否霧化 每屏最多顯示多少條 有無二級菜單,如果有,怎樣調(diào)出和收回,和一級菜單的位置關(guān)系,焦點(diǎn)條的區(qū)別 菜單項文字靠左 數(shù)字標(biāo)號,如果整個軟件能保證菜單項目均在10位以內(nèi),建議加上,這樣可以與數(shù)字鍵盤對應(yīng) 對聚焦項或當(dāng)前頁面不適用的菜單項,是不顯示還是文字變灰處理。 OK鍵菜單只包含針對聚焦內(nèi)容的操作項,需控制在一屏之內(nèi),避免二級項 菜單項的排序規(guī)則:針對聚焦項的在上,其他的在下,這兩部分中分別按照使用頻率從上至下排列Page 1422.菜單 And
51、roid:Page 1432.菜單 Iphone:Page 1442.菜單 三者導(dǎo)航系統(tǒng)進(jìn)行說明:Page 1452.菜單 各平臺對導(dǎo)航系統(tǒng)的規(guī)劃: 標(biāo)題顯示當(dāng)前位置,可以是文字、圖標(biāo)+文字、也可以是一系列tab 菜單顯示可以做些什么,通常包含兩種類型的選項:a只針對選中項/只針對當(dāng)前頁,b全局功能如設(shè)置和幫助,也就是說菜單大多數(shù)作用是發(fā)起針對當(dāng)前頁的操作,或者轉(zhuǎn)到和當(dāng)前頁面沒直接關(guān)系的頁面 返回這個比較復(fù)雜一些,也是最需要設(shè)計師注意的。鑒于第2條對于菜單形式的描述,如果再加入關(guān)聯(lián)頁面的選項,項目數(shù)量和類型會使菜單不堪重負(fù)。 并且頁面標(biāo)題通常無法準(zhǔn)確表達(dá)出相應(yīng)頁面的內(nèi)容,即使放入菜單,也需要用
52、戶花時間去理解和回憶。所以“返回”很重要:一個固定的位置,簡單機(jī)械的一個動 作,一按一看一按一看,不需要刻意尋找和思考。在一個沒有全局導(dǎo)航的環(huán)境里,一步步后退到自己瀏覽過的頁面,從而了解當(dāng)前的頁面體系,或者重新發(fā)起 一系列操作,是個能保證用戶找到位置的簡單高效的模式。Page 1463.焦點(diǎn) 焦點(diǎn)更大的意義是在按鍵機(jī)型上,用一個帶底色的條框襯托出當(dāng)前選中的項。對焦點(diǎn)的設(shè)定和控制應(yīng)當(dāng)盡可能的簡單,需要定義默認(rèn)聚焦的位置、是否允許上下左右循環(huán)。Page 1473.焦點(diǎn)Page 1483.焦點(diǎn)Page 1494.彈出框 除了菜單功能的以外,彈出框一般出現(xiàn)在屏幕底端,同時其他屏幕其他部分背景霧化,這有
53、利于用戶的視線從密密麻麻的小屏幕中快速找到關(guān)鍵: Page 1504.彈出框 彈出框有很多種類型,除了“確定”“取消”等元件的基本布局以外,幾個平臺區(qū)別不是很大,大致可以分成幾個類型和對應(yīng)的處理方式,以下是歸納和建議的一些處理方式,只列最適用于S60第3版的:Page 1514.彈出框Page 1525.列表 列表項的呈現(xiàn)可以集中定義幾種模式:常態(tài)、編輯/被調(diào)用Page 1535.列表 常態(tài)Page 1545.列表 編輯/被調(diào)用Page 1556.其它 搜索邏輯 事件處理:無信號、低電量提示的形式和時機(jī)、來電、來短信、鬧鐘時間到、緩存已滿、發(fā)現(xiàn)新版本等。 文本輸入:光標(biāo)的移動、刪除和復(fù)制粘貼、
54、選中地址/人名等。 復(fù)雜邏輯的返回路徑Page 1566.其它 復(fù)雜邏輯的返回路徑Page 157Android_UI設(shè)計指南.pdfAndroid手機(jī)交互特性.pdf基于Android的DogBook寵物社區(qū)交互手機(jī)應(yīng)用Page 1581、iPhone App的特點(diǎn)2、iPhone的使用習(xí)慣3、iPhone App的基本設(shè)計方法Page 159iPhone App的特點(diǎn) 虛擬鍵盤:iPhone雖然與Android同為觸屏,但沒有物理鍵盤(而Android有可能有物理鍵盤),所有的輸入操作都需要屏幕中的虛擬鍵盤來實(shí)現(xiàn),同時需要考慮虛擬鍵盤的遮擋問題。 目錄導(dǎo)航:沒有物理按鍵做為目錄菜單的呼出功
55、能,完全不同于Symbian和Android系統(tǒng),包括導(dǎo)航也需要屏幕中的虛擬按鈕來實(shí)現(xiàn)。 功能操作:需要把所有的功能集成在App中,比如我們可以用Tab bar來做功能的分類,工具欄來做具體視圖的功能操作集合。Page 160iPhone的使用習(xí)慣Page 161iPhone的使用習(xí)慣 自上而下的操作 減少輸入 足夠大的按鈕面積 多點(diǎn)觸控手勢Page 162iPhone App的基本設(shè)計方法:iPhone應(yīng)用的分類 1) 高效型 這類應(yīng)用可以幫助用戶快速完成一個任務(wù),注重內(nèi)容的組織邏輯功能和信息架構(gòu)的展現(xiàn),以方便用戶快速高效的使用,最終完成任務(wù)。此類應(yīng)用一般包含大量的列表及每個列表中的任務(wù)功能
56、。最典型的就是系統(tǒng)自帶的“Mail”應(yīng)用,這是一個非常典型的高效型應(yīng)用。 此類應(yīng)用給用戶的感覺是層層進(jìn)入,內(nèi)容逐步具體化,直到可以完成用戶的任務(wù)。 另外一個非系統(tǒng)應(yīng)用且典型的就是QQ,可以看一下是不是也遵循這個特點(diǎn)。 Page 163Page 164iPhone App的基本設(shè)計方法:iPhone應(yīng)用的分類 2)實(shí)用工具型應(yīng)用 此類應(yīng)用一般交互操作非常少,也沒有很深的層次結(jié)構(gòu),往往都是直接了當(dāng)?shù)恼故拘畔?,一般會在“背面?通常會有一個翻轉(zhuǎn)的效果)展示設(shè)置功能。最常見的就是“天氣”和“股票”兩個系統(tǒng)自帶的應(yīng)用。Page 165iPhone App的基本設(shè)計方法 :iPhone應(yīng)用的分類 3)浸入
57、式應(yīng)用 大多指游戲類應(yīng)用,但也有一些實(shí)用工具,比如電子羅盤,所謂浸入式應(yīng)用一般是全屏模式,專注一個任務(wù)或是娛樂的深入體驗(yàn),沒有過多的文字,而將用戶的注意力放在如何使用它。Page 166iPhone App的基本設(shè)計方法 :設(shè)計iPhone應(yīng)用 1) iPhone應(yīng)用的基本結(jié)構(gòu) 狀態(tài)欄:這是ios系統(tǒng)的一部分,除了浸入式應(yīng)用外,其他應(yīng)用一般都會保留這個bar。 導(dǎo)航欄:這里包括當(dāng)前的title,當(dāng)前的主要操作的控件和返回的導(dǎo)航功能 工具欄:對當(dāng)前內(nèi)容區(qū)可執(zhí)行的功能動作。 標(biāo)簽欄:可以理解為全局導(dǎo)航,方便快速切換功能或是導(dǎo)航。工具欄和標(biāo)簽欄在一個視圖中只能存在一個。Page 167iPhone
58、App的基本設(shè)計方法 :設(shè)計iPhone應(yīng)用 1) iPhone應(yīng)用的基本結(jié)構(gòu)Page 168iPhone App的基本設(shè)計方法 :設(shè)計iPhone應(yīng)用 2)移植應(yīng)用 考慮這個web端的產(chǎn)品,核心功能是什么,任何一個產(chǎn)品都會有核心功能,以及附加功能,比如QQ,核心功能就是IM,即時通信,可能截屏是一個附加功能,盡管用的人非常多。確定核心功能后,以及圍繞核心功能盡可能少的擴(kuò)展功能和邏輯。如果你的web網(wǎng)站或是你的業(yè)務(wù)包括很多,可以把他們按不同業(yè)務(wù)類型拆分成不同的多個應(yīng)用。Page 169iPhone App的基本設(shè)計方法 :設(shè)計iPhone應(yīng)用 2)移植應(yīng)用 對確認(rèn)的功能結(jié)構(gòu)考慮在iPhone上的信息架構(gòu)模型,上文說過,iPhone應(yīng)用是線性的連貫操作,一層一層進(jìn)入直到完成最后的任務(wù),所以你要按這個思路去整理信息架構(gòu),一般來說,操作的深度不要超過3層,如果超過3層就要對產(chǎn)品形態(tài)進(jìn)行扁平化處理,即由深度改為廣度,因?yàn)殡S著深度的增加,每一級別都會有不同的功能,甚至有承載上一級的功能或邏輯,深度
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年水庫下閘蓄水安全鑒定工作報告范文
- 品牌營銷策劃書大綱3
- 法律文化在法律宣傳與普及中的創(chuàng)新與實(shí)踐研究
- 居家智慧健身計劃書
- 《平行線的判定》課件
- (高清版)DB62∕T 4745-2023 苦參栽培技術(shù)規(guī)程
- 《我能行》教學(xué)課件
- (高清版)DB62∕T 4687-2023 紫穗槐育苗技術(shù)規(guī)程
- 【9化一?!?024年安徽省蕪湖市第二十九中學(xué)中考第一次模擬考試化學(xué)試卷
- 保密知識考試題庫帶答案(培優(yōu)a卷)
- 2025年入團(tuán)考試時事熱點(diǎn)及試題與答案
- (2025)保密觀題庫及答案
- 中華人民共和國民營經(jīng)濟(jì)促進(jìn)法
- 2024年山東省濟(jì)南市中考地理試題卷(含答案解析)
- 電大信息技術(shù)應(yīng)用終結(jié)性作業(yè)
- JJG 162-2019飲用冷水水表 檢定規(guī)程(高清版)
- 用數(shù)控車床四工位刀架控制系統(tǒng)的設(shè)計001
- 承包商安全培訓(xùn)教材
- 年產(chǎn)600噸氮化鋁粉體工廠設(shè)計講解
- 分組與分配問題.doc
- 高等學(xué)校畢業(yè)生登記表(適于江蘇省,完整版)
評論
0/150
提交評論