(8 Android) 用戶界面UI設計
3.1.1 Android界面視圖類
Android 圖形化的用戶界面(Graphical User Interface , GUI) 采用了結構清晰的MVC模型(Model-View-Controller) ,其具體含義:
·提供了處理用戶輸入的控制器(Controller) ;
·顯示用戶界面的視圖(View) ;
·保存數據和代碼的模型(Model) 。
在Android MVC中,控制器是由Activity組件完成的,它能夠接受並響應程序的外部動作,如按鍵動作或觸摸屏動作等,每個外部動作作為一個對立的事件被加入隊列中,按照"先進先出"的規則從隊列中獲取事件,並將這個事件分配給所對應的事件處理函數。
控制器負責接受並響應程序的外部動作;通過視圖反饋應用程序給用戶的信息(通常是手機屏信息反饋) ;模型是應用程序的核心,用於保存數據和代碼。
Android視圖類android.view.View提供了用於處理屏幕事件的多個內部接口(如OnClickListener等)及常用方法(如setVisibility()等)。
3.1.2 Android用戶界面事件
在Android系統中,各種屏幕手勢的相關信息(如操作類別、發生時間等)被自動封裝成一個KeyEvent對象,供應用程序使用。因此,在Activity的事件處理方法中,需要使用表示手勢事件對象的事件參數event。
Activity提供了響應各種屏幕手勢的方法,如按鍵方法onKeyDown()、松開按鍵方法onKeyUp()、長按鍵方法onKeyLongPress()等。
除了使用界面事件外,還有鍵盤事件。類KeyEvent定義了分別對應於Back鍵、Home鍵和Menu鍵的鍵盤掃描碼(實質上是靜態常量)。
Activity提供的方法onKeyDown(keyCode,event)用來捕捉手機鍵盤被按下(短按,不是長按)的事件。其中, 參數keyCode 表示鍵盤掃描碼,通常使用類KeyEvent的靜態常量表示。
Android程序通常需要偵昕用戶和應用程序之間交互的事件。對於用戶界面中的事件,偵聽方法就是從與用戶交互的特定視圖對象中截獲這些事件。
事件偵昕器(Event Listener)是視圖View類的內部接口,包含一個單獨的回調方法。這些方法將在視圖中注冊的偵聽器被用戶界面操作觸發時由Android框架調用。下面這些回調方法被包含在事件偵聽器接口中:
• onClick()包含於View.OnClickListener中,單擊時調用;
• onLongClick()包含於View.OnLongClickListener中,長按時調用;
• onTouch()包含於View.OnTouchListener中,當用戶執行的動作被當作一個觸摸事件時被調用,包括按下、釋放和在屏幕上進行的任何移動手勢。
3.1.3 界面與布局
res/layout目錄下存放定義UI設計的XML文件。UI設計有兩種方式: 一種是Text視圖方式,在XML文件中,可以直接寫布局及控件代碼:另一種是Design視圖方式,可以直接拖曳控件至設計區域。
布局相當於一個容器控件,其屬性android:padding(或android:paddingLeft等)用於控制該容器內第一個元素與父布局(容器)之間的間隔,而屬性android:layout_margin等用於設置同一布局內各元素之間的間隔。布局內控件的常用布局屬性還有以下幾個。
• android:layout_width表示控件的寬度。
• android:layout_height表示控件的高度。
• android:id表示控件的標識。
• android:layout_below表示將該控件的底部置於給定ID控件之下。
布局類型分為如下幾種:
1 .線性布局
線性布局使用成對的< LinearLayout >
標簽,必須指定分別表示容器寬度和高度的兩個屬性android:layout_width和android:layout_height,它們的取值為match_parent(匹配父容器)、wrap_content(自適應控件大小)或具體值(以dp為單位)。
線性布局可選屬性主要是android:orientation,當取值為vertical時稱為垂直線性布局,當取值為horizontal時稱為水平線性布局,且以vertical為默認值。
垂直線性布局時,每個控件占一行;水平線性布局時,控件自左向右排列,控件太多時也不會轉行。
注意:調整線性布局內的各個控件之間的間距,使用android:layout_weight屬性比較方便。
線性布局也可以嵌套使用。例如,在垂直線性布局里嵌套一個水平線性布局時,就可以在一行內水平放置多個控件。
2.相對布局
相對布局在布局文件中使用< RelativeLayout >
標簽,除了第一個元素外,其他元素需要參考另一個元素進行相對定位(含方向、偏移和對齊方式) ,常用屬性如下。
• android:layout_below表示位於下方。
• android:layout_above表示位於上方。
• layout_toRightOf表示位於右方。
• layout_toLeftOf表示位於左方。
• android:layout_marginTop表示偏移(正值向下,負值向上)。
• android:layout_marginLeft表示偏移(正值向右,負值向左)。
• android:layout_alignLeft表示左對齊(默認)。
• android:layout_alignRight 表示右對齊。
• android:layout_alignTop 表示頂部對齊(默認)。
• android:layout_alignBottom 表示底部對齊。
• android:layout_alignBaseline 表示垂直居中。
3.約束布局
傳統的Android開發,其界面基本都是靠編寫XML代碼完成的。約束布局是Android Studio 2.3之后推薦且默認使用的布局,完全使用可視化的操作方式,在布局文件中使用<android.support.constraint.ConstraintLayout>標簽聲明約束布局。
當拖曳某個控件至界面時,系統提示缺少約束的紅色警告,表明程序運行時該控件將出現在屏幕左上角(0,0)位置。解決方法有如下兩種:
(1)單擊該控件,使用魔術棒工具來自動添加用於確定控件位置的約束線。此時,該控件至少存在兩條約束線;
(2)單擊該控件,從出現的四個圓點中,任選一個圓點並拖曳到四周的邊線或控件圓點來建立位置約束。重復此操作,直到紅色警告消失。
選中某個己經添加約束的控件,若使用清除工具,將刪除己經建立的所有約束線;若單擊其中的某條約束線的圓點端,將刪除本約束線。
4.幀布局
幀布局像一層層畫布,添加的控件一層層地放上去。幀布局添加的各個控件默認都將對齊到屏幕的左上角。
在一個有兩層的幀布局中,如果浮於上面的第二層可以看到下層,是因為background屬性設置包含了透明度參數,有如下兩種實現方式。
方法一是設置控件的背景色,使用如下屬性:
android:background="#aarrggbb"
其中, aa表示透明度參數(十六進制) 。
方法二是在程序里使用如下方法:
v.getBackground().setAlpha(a); / /透明度參數a取值范圍為0--255
其中,v為View對象,a為十進制數。