【轉】關於android屏幕和軟件UI設計的參考資料

1.  什麼是density

引用
1) density
density表示每英寸有多少個顯示點(邏輯值),它的單位是dpi:dot per inch,一般屏幕大時,density就大,屏幕小時,density就小,一般
屏幕實際分辨率爲240px*400px時,density=120
屏幕實際分辨率爲320px*533px,density=160
屏幕實際分辨率爲480px*800px,density=240

2)  分辨率
是整個屏是多少點,好比800x480,它是軟件的顯示單位

3) 從Android1.6版本開始支持density(對應API Level 4)
用於解決應用在屏幕大小不一樣的硬件上正常顯示的問題


2. 相關代碼及設置

引用
1)         AndroidManifest.xml
<SUPPORTS-SCREENS android:anyDensity="true" />
<USES-SDK android:minSdkVersion="4">
這個參數在API Level 4也就是SDK 1.6之後才啓用的,並且1.6版本的API Level 4的應用默認值就是True

2) 資源目錄名(android 2.0之後)
res/xxx-hdpi         當density爲240時,使用此目錄下的資源
res/xxx-mdpi        當density爲160時,使用此目錄下的資源
res/xxx-ldpi          當density爲120時,使用此目錄下的資源
res/xxx                 不常後綴,爲默認設置,同xxx-mdpi

3) 資源單位(xml文件中定義大小的單位)

a)  dp=dip=dx (Density independent pixel)
基於屏幕密度的抽象單位,設備無關的點,用於說明與密度無關的尺寸和位置。這些單位是相對於一個160dpi的屏幕,全部一個dp是160dpi屏幕上的一個點。

b)  px
px指軟件的單位點,設備相關的點

c)  具體使用

i.佈局時儘可能使用單位dip,少使用px
若使用px,若是設某控件大小400x400px,在800x480上顯示正常,而在533x320的屏上就超出屏幕了
若使用dp,若是設某控件大小爲160x160dp,就能夠經過從系統中取density來算出真正的大小,好比在800x480屏的density設爲240,而533x320屏的density設爲160,借如下公式計算
pixels = dips * (density / 160)
在800x480在屏中顯示240象素,而在533x320的屏中顯示爲160象素,控件在屏中顯示的比例是同樣的。

ii. 內部的處理過程分爲三步:
取screen中其它元素,轉爲應用的值,計算應用各控件位置,而後再轉成800x480以供真正顯示
若res-xxx不存在,則讀取res有的資源,而後對其作相應縮放


3. 實現density的關鍵源碼

引用
1)         BitmapFactory.java(用於縮放圖片)

2)         ComptibilityInfo.java(用於位置計算)


四、取得屏幕信息(寬高等)

public static String getDisplayMetrics(Context cx) {
  String str = "";
  DisplayMetrics dm = new DisplayMetrics();
  dm = cx.getApplicationContext().getResources().getDisplayMetrics();
  int screenWidth = dm.widthPixels;
  int screenHeight = dm.heightPixels;
  float density = dm.density;
  float xdpi = dm.xdpi;
  float ydpi = dm.ydpi;
  str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n";
  str += "The absolute heightin:" + String.valueOf(screenHeight)
      + "pixels\n";
  str += "The logical density of the display.:" + String.valueOf(density)
      + "\n";
  str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n";
  str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n";
  return str;
}


5 取得狀態欄和標題欄高度

TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.layout_test2);   tv1 = (TextView) findViewById(R.id.TextView01);   tv1.post(new Runnable(){      public void run()      {        processLayout();      }    });  } private void processLayout(){      Rect rect= new Rect();    Window window= getWindow();    tv1.getWindowVisibleDisplayFrame(rect);    //狀態欄高度   int statusBarHeight= rect.top;    int contentViewTop= window.findViewById(windows.iD_ANDROID_CONTENT).getTop();    //標題欄高度   int titleBarHeight= contentViewTop - statusBarHeight;    //測試結果:ok以後 100多 ms 才運行了    Log.v("test", "=-init-= statusBarHeight="+statusBarHeight+    " contentViewTop="+contentViewTop+    " titleBarHeight="+titleBarHeight);     }
1. 五不要和九要     1. 不要照搬其餘平臺上的UI設計。應該讓用戶感受是在使用一個真正的 Android 軟件,在你的品牌顯示和平臺總體觀感之間作好平衡。     2. 不要過分使用模態進度條和確認對話框。     3. 不要使用固定的絕對定位佈局。     4. 不要使用px單位,使用dp;若是是文本,使用sp。     5. 不要使用過小的字體。      1. 全部資源都要針對高分辨率屏幕建立(縮小總比放大好)     2. 須要點擊的元素要夠大     3. 圖標設計要遵循 Android 的準則     4. 要使用適當的間距(margins, padding)     5. 要支持D-pad和trackball導航     6. 要正確管理活動(activity)棧     7. 要正確處理屏幕方向變化     8. 要使用主題/樣式、尺寸和顏色資源來減小界面冗餘     9. 要和視覺與交互設計師合做!!! 2. 設計理念和考慮因素     設計理念         1. 乾淨而不過於簡單         2. 關注內容而非修飾         3. 一致,吸引人,少許簡潔的變化         4. 使用雲端服務(同時在PC桌面和手機上同步用戶使用場景)來增強用戶體驗     優秀界面的設計準則         1. 關注用戶             瞭解你的用戶(年齡,技能,文化,是否有身體障礙,對應用的需求,使用的設備,什麼時候何地如何使用設備)             「用戶優先」的設計心態(用戶一般是任務導向的)             更早、更頻繁的由真實用戶來測試         2. 顯示正確的內容             最經常使用的操做用戶應該當即能夠看到而且使用             次要功能能夠放到菜單裏面         3. 給予用戶適當的回饋             交互式的UI元素最少須要反映出4種不一樣的狀態 (default,disabled,focused,pressed)             保證操做的結果是清晰可見的             多給予用戶進度提示,可是不要干擾他們當前的操做         4. 有章可循的行爲模式             行爲模式遵循用戶的指望(正確的操做活動棧,顯示用戶指望看到的信息和動做)             使用合適的方式來增強功能可見性(可點擊的元素就應該看起來是能夠點擊的)             若是用戶完成一項任務須要複雜的操做,從新思考你的設計!!!         5. 容忍錯誤             只容許有意義的操做(適當禁用一些UI元素)             儘可能減小不可回退的操做             容許回退(undo)比使用肯定對話框更好(實際上,應該儘可能少用肯定對話框,它對用戶是一種干擾 設計上的考慮因素 1.  屏幕的物理尺寸 2.  屏幕密度 3.  屏幕的方向(豎向和橫向) 4.  主要的UI交互方式(觸屏仍是使用D-pad/trackball) 5.  軟鍵盤仍是物理鍵盤 6.  瞭解不一樣設備之間的相異之處是很是重要的! 7.  閱讀CDD(兼容性定義文檔),瞭解設備可能的差別 8.  瞭解屏幕尺寸和密度分類(網絡資料)
相關文章
相關標籤/搜索