成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android用戶界面設計:相對布局

移動開發 Android
在前面我們能介紹了Android用戶界面設計的基本按鈕、布局基礎和線性布局,本文我們將介紹Android用戶界面設計的相對布局:相對布局可以是很強大和靈活布局,很多有趣的Android程序用戶界面都可以基于它來設計。

理解布局對于良好的Android程序設計非常重要。在這個教程里,你將學到相對布局的所有知識,相對布局用于將用戶界面控件或小工具相對于其它控件或它們的父級布局組織在屏幕上。當使用正確的時候,相對布局可以是很強大和靈活布局,很多有趣的Android程序用戶界面都可以基于它來設計。

什么是相對布局

除了將控件顯示在一行或一列的線性布局,相對布局也是Android用戶界面設計使用得很普遍的布局類型。和其它布局很相似,相對布局可以通過XML布局資源來定義也可以用Java程序來定義。相對布局的功能就像它的名字表達的一樣:它相對其它控件或父控件本身來組織控件。

這是什么意思呢?意思是子控件,比如ImageView,TextView,和Button控件,可以放在另外一個控件的上面,下面,或是左邊或者右邊。子控件可以相對于父控件(相對布局容器)放置,包括放置在布局的頂部,底部,左部或右部邊緣。

相對布局子控件位置使用規則來定義。這些規則定義了相對布局內的控件如何顯示。相對布局的完整規則列表請參見RelativeLayout類的Android SDK文檔。相關的用于XML資源的XML屬性也可以在文檔中找到。

注意:規則要求每個子控件恰當地設置了它的id屬性。

一個簡單的相對布局

相對布局最好使用例子來解釋。假設我們要設計一個屏幕,包含一個EditText控件和一個Button控件。我們希望Button顯示在EditText控件的右邊。因此,我們可以定義一個包含兩個子控件的相對布局:子控件分別是EditText和Button。EditText控件可能有一個規則說:將這個控件放置在父控件(布局)的左手邊并且在第二個控件(Button)的左邊。同時,Button控件可能有一個規則:將這個控件放置在父控件(布局)的右手邊。

下面的圖片就展示了這樣一個相對布局,分別是豎屏和橫屏模式。這個相對布局有兩個子控件:一個EditText控件和一個Button控件。

 

#p#

 

定義帶有相對布局的XML資源文件

設計程序用戶界面最方便和可維護的方法是創建XML布局資源。這個方法極大地簡化了UI設計過程,將很多靜態創建和用戶界面控件的布局以及控件屬性的定義移到XML中去,取代了寫代碼。

XML布局資源必須存儲在/res/layout項目目錄下。讓我們看看前一節介紹的相對布局。這個布局資源文件,恰當地命名為/res/layout/relative.xml,在XML中如下定義:

  1. xmlns:android="http://schemas.android.com/apk/res/android" 
  2.  
  3. android:layout_height="fill_parent" 
  4.  
  5. android:layout_width="fill_parent"> 
  6.  
  7.  
  8. android:id="@+id/EditText01" 
  9.  
  10. android:hint="Enter some text..." 
  11.  
  12. android:layout_alignParentLeft="true" 
  13.  
  14. android:layout_width="fill_parent" 
  15.  
  16. android:layout_toLeftOf="@+id/Button01" 
  17.  
  18. android:layout_height="wrap_content"> 
  19.  
  20.  
  21. android:id="@+id/Button01" 
  22.  
  23. android:text="Press Here!" 
  24.  
  25. android:layout_width="wrap_content" 
  26.  
  27. android:layout_alignParentRight="true" 
  28.  
  29. android:layout_height="wrap_content"> 

回憶一下,在Activity中,只需要在onCreate()方法中添加一行代碼來在屏幕上加載和顯示布局資源。如果布局資源存放在/res/layout/relative.xml文件中,這行代碼應該是:

  1. setContentView(R.layout.relative); 

這個相對布局設置了寬和高填充整個屏幕,并且它的子控件配置了三個規則:

◆EditText01:對齊到布局的左手邊

◆EditText01:顯示在Button01的左邊

◆Button01:對齊到布局的右手邊

用程序定義相對布局

你也可以用程序創建和配置相對布局。這通過使用RelativeLayout類(android.widget.Relative)來實現。你會在RelativeLayout.LayoutParams類中找到具體的參數。同樣地,典型的布局參數(android.view.ViewGroup.LayoutParams),比如layout_height和layout_width,以及邊距參數(ViewGroup.MarginLayoutParams),也能用在RelativeLayout對象上。

你必須用Java創建屏幕內容,然后向setContentView()方法提供一個包含所有要作為子視圖顯示的控件內容的父布局對象,而不是像前面所示直接使用setContentView()方法來加載布局資源。在這里,你的父布局就是相對布局。例如,下面的代碼示例了如何用程序在活動中實例化一個RelativeLayout并且在它的onCreate()方法中向它添加一個TextView和一個Button控件,就像前面一節展示的布局一樣:

  1. public void onCreate(Bundle savedInstanceState) {  
  2.  
  3. super.onCreate(savedInstanceState);  
  4.  
  5. // setContentView(R.layout.relative);  
  6.  
  7. EditText ed = new EditText(this);  
  8.  
  9. RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,  
  10.  
  11. LayoutParams.WRAP_CONTENT);  
  12.  
  13. params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);  
  14.  
  15. // use same id as defined when adding the button  
  16.  
  17. params.addRule(RelativeLayout.LEFT_OF, 1001);  
  18.  
  19. ed.setLayoutParams(params);  
  20.  
  21. ed.setHint("Enter some text....");  
  22.  
  23. Button but1 = new Button(this);  
  24.  
  25. RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,  
  26.  
  27. LayoutParams.WRAP_CONTENT);  
  28.  
  29. params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);  
  30.  
  31. but1.setLayoutParams(params2);  
  32.  
  33. but1.setText("Press Here!");  
  34.  
  35. // give the button an id that we know  
  36.  
  37. but1.setId(1001);  
  38.  
  39. RelativeLayout layout1 = new RelativeLayout(this);  
  40.  
  41. layout1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  42.  
  43. layout1.addView(ed);  
  44.  
  45. layout1.addView(but1);  
  46.  
  47. setContentView(layout1);  
  48.  
  49. }  

讓我們仔細看一下上面的Java代碼。首先我們像平常一樣創建一個EditText控件。我們給它一些RelativeLayout參數,然后設置它的規則。在這里,我們為EditText控件創建2個規則。

接下來,我們創建一個Button控件并且設置它的規則(對齊到父布局右邊緣)。最后,我們創建一個RelativeLayout對象,設置它的參數,使用addView()方法添加兩個控件并且使用setContentView()方法加載顯示相對布局。

如你所見,當越來越多的控件要添加到屏幕時,代碼量會很快地增長。為了易組織和可維護性,用程序定義并使用布局最好是用在特殊情況而不是一般情況。#p#

探討相對布局的重要特性和屬性

現在讓我們來討論一些幫助配置相對布局和它的子控件的屬性。一些特定的屬性用于相對布局,也就是子規則,包括:

◆用于子控件在父布局中居中的規則,包括:水平居中,垂直居中,或者兩者皆居中。

◆用于子控件在父布局中排布的規則,包括:在頂部,底部,左,右邊緣放置。

◆用于子控件相對于其它子控件排布的規則,包括:在另一個控件頂,底,左,右邊緣放置。

◆用于子控件相對于其它子控件放置的規則,包括:在另一個控件上面,底下,左邊或右邊放置。

同樣的,通用的 ViewGroup-style屬性也可以應用于相對布局。這些屬性包括:

◆通用布局參數比如layout_height(必須)和layout_width(必須)(類:ViewGroup.LayoutParams)

◆邊距布局參數比如margin_top, margin_left, margin_right和margin_bottom (類:ViewGroup. MarginLayoutParams)

布局參數比如layout_height和layout_width (類:ViewGroup.LayoutParams)

現在讓我們來實踐這些規則吧!

使用布局規則

讓我們看一個更復雜的屏幕設計。為了這個練習,我們從查看最終屏幕效果開始,然后再倒回來工作,并討論這個相對布局的特性和為了達到最終結果所使用的規則。

我們希望設計一個如下所示的屏幕:

 

 

為了使用相對布局來設計這個屏幕,參考以下步驟。

步驟1:在你的XML資源文件中定義一個相對布局

首先,在你的XML資源文件中定義一個相對布局。因為你想這個布局控制整個屏幕的內容,所以設置它的高和寬屬性為fill_parent。你的XML資源文件應該看起來像這樣:

  1. xmlns:android="http://schemas.android.com/apk/res/android"  
  2.  
  3. android:layout_height="fill_parent"    
  4.  
  5. android:layout_width="fill_parent">   

 

 

步驟2:確定子控件

接下來,我們確定需要什么樣的子控件。在這里,我們需要7個TextView控件(第個一種顏色)。像平常一樣配置它們,設置文本屬性為字符串,背景色,字號等等。將這些控件都放到相對布局中。

步驟3:定義相對布局規則

接下來,我們為每個子控件定義規則,以使它們被繪制到合適的位置:

◆RED TextView控件沒有特別的設置。默認地,這個控件將會被繪制到父布局的左上角。

◆ORANGE TextView控件在父布局中水平居中。因為所有控件默認都會靠向屏幕的左上角,這有效地將控件定位到父布局的邊緣頂部中間。

◆YELLOW TextView控件定位到父布局的右邊緣。因為所有控件默認都會靠向屏幕的左上角,這有效的定位控件到父布局的右上角。

◆GREEN TextView控件在父布局中垂直居中,并且設置為顯示在BLUE TextView控件的左邊。

◆BLUE TextView控件被定位在父控件的中心(水平和垂直)。這將它顯示在屏幕的中心位置。

◆INDIGO TextView控件在父局中垂直居中,并且設置為顯示在BLUE TextView控件的右邊。

◆VIOLET TextView控件被定位到父布局的底部邊緣。它的寬度也被設置為填滿父容器,允許它延伸到屏幕的底部邊緣。

如果你在你的XML資源文件中定義這些規則,XML文件代碼將看起如下:

  1. xmlns:android="http://schemas.android.com/apk/res/android" 
  2.  
  3. android:layout_height="fill_parent" 
  4.  
  5. android:layout_width="fill_parent"> 
  6.  
  7.  
  8. android:text="RED" 
  9.  
  10. android:id="@+id/TextView01" 
  11.  
  12. android:layout_height="wrap_content" 
  13.  
  14. android:background="#f00" 
  15.  
  16. android:gravity="center" 
  17.  
  18. android:textColor="#000" 
  19.  
  20. android:layout_width="wrap_content" 
  21.  
  22. android:padding="25dp"> 
  23.  
  24.  
  25. android:text="ORANGE" 
  26.  
  27. android:layout_height="wrap_content" 
  28.  
  29. android:background="#ffa500" 
  30.  
  31. android:gravity="center" 
  32.  
  33. android:textColor="#000" 
  34.  
  35. android:id="@+id/TextView02" 
  36.  
  37. android:layout_width="wrap_content" 
  38.  
  39. android:layout_centerHorizontal="true" 
  40.  
  41. android:padding="25dp"> 
  42.  
  43.  
  44. android:text="YELLOW" 
  45.  
  46. android:layout_height="wrap_content" 
  47.  
  48. android:background="#ffff00" 
  49.  
  50. android:gravity="center" 
  51.  
  52. android:textColor="#000" 
  53.  
  54. android:id="@+id/TextView03" 
  55.  
  56. android:layout_width="wrap_content" 
  57.  
  58. android:layout_alignParentRight="true" 
  59.  
  60. android:padding="25dp"> 
  61.  
  62.  
  63. android:text="GREEN" 
  64.  
  65. android:layout_height="wrap_content" 
  66.  
  67. android:background="#0f0" 
  68.  
  69. android:gravity="center" 
  70.  
  71. android:textColor="#000" 
  72.  
  73. android:id="@+id/TextView04" 
  74.  
  75. android:layout_width="wrap_content" 
  76.  
  77. android:layout_toLeftOf="@+id/TextView05" 
  78.  
  79. android:padding="25dp" 
  80.  
  81. android:layout_centerVertical="true"> 
  82.  
  83.  
  84. android:text="BLUE" 
  85.  
  86. android:layout_height="wrap_content" 
  87.  
  88. android:background="#00f" 
  89.  
  90. android:gravity="center" 
  91.  
  92. android:textColor="#fff" 
  93.  
  94. android:id="@+id/TextView05" 
  95.  
  96. android:layout_width="wrap_content" 
  97.  
  98. android:layout_centerInParent="true" 
  99.  
  100. android:layout_margin="10dp" 
  101.  
  102. android:padding="25dp"> 
  103.  
  104.  
  105. android:text="INDIGO" 
  106.  
  107. android:layout_height="wrap_content" 
  108.  
  109. android:gravity="center" 
  110.  
  111. android:textColor="#fff" 
  112.  
  113. android:id="@+id/TextView06" 
  114.  
  115. android:layout_width="wrap_content" 
  116.  
  117. android:layout_toRightOf="@+id/TextView05" 
  118.  
  119. android:background="#4b0082" 
  120.  
  121. android:padding="25dp" 
  122.  
  123. android:layout_centerVertical="true"> 
  124.  
  125.  
  126. android:text="VIOLET" 
  127.  
  128. android:layout_height="wrap_content" 
  129.  
  130. android:background="#ee82ee" 
  131.  
  132. android:gravity="center" 
  133.  
  134. android:textColor="#000" 
  135.  
  136. android:id="@+id/TextView07" 
  137.  
  138. android:layout_alignParentBottom="true" 
  139.  
  140. android:layout_width="fill_parent" 
  141.  
  142. android:padding="25dp"> 

#p#相對布局使用技巧

◆這里是一些使用相對布局的技巧。

◆相對布局的子控件必須有唯一的id屬性以使規則正確應用。

◆當心循環規則。循環規則發生在兩個控件具有互相指向的規則時。如果你在布局設計中使用了循環規則,你將會得到以下錯誤信息:

IllegalStateException: Circular dependencies cannot exist in a RelativeLayout(相對布局中不允許存在循環依賴)

◆回憶一下相對布局規則的應用被一次處理是很有用的

◆保持你的相對布局規則最小化。這減小了循環規則的機率并且使得你的布局更加可維護和靈活。

◆一般地,記住測試一下你的布局設計在橫屏和豎屏模式下,以及在不同的屏幕大小和解決方案下是不是符合預期的。

◆使用相對布局代替嵌套線性布局以改進程序性能和響應能力。

總結

Android程序用戶界面使用布局來定義,相對布局是用于使得程序屏幕更加靈活和強大的布局類型之一。相對布局允許子控件相對于其它子控件和相對于父控件(邊緣以及水平和垂直居中)來組織。一旦你掌握了如何使用相對布局的規則,它們可以有非常多的用處,使你能夠創建復雜布局,而不需要過多嵌套不同的布局,因此也改進了性能。

【編輯推薦】

  1. Android用戶界面設計:基本按鈕
  2. Android用戶界面設計:布局基礎
  3. Android用戶界面設計:線性布局
  4. 淺析iOS移動設備用戶界面設計11大精粹
  5. 三星bada全新UI界面設計
責任編輯:佚名 來源: rockux
相關推薦

2011-04-22 11:01:36

框架布局界面設計Android

2011-04-11 17:25:30

線性布局用戶界面設計Android

2011-04-11 17:07:33

布局基礎用戶界面設計Android

2011-05-19 08:49:01

使用片段界面設計Android

2011-04-08 13:58:10

Android界面設計

2011-06-01 10:58:57

2011-06-01 10:30:41

用戶界面

2011-12-20 10:42:22

Android應用界面設計

2011-03-02 14:03:02

DashboardAndroid用戶界面反例模板

2011-03-02 10:49:42

DashboardAndroid用戶界面設計模板

2013-11-27 10:12:11

2012-01-16 16:16:49

JavaSwing

2013-12-26 15:46:30

Android開發Android應用用戶界面設計

2011-06-01 16:50:05

Android ListView

2014-11-26 10:42:55

界面設計

2011-06-01 09:31:46

用戶界面設計

2012-01-16 11:03:09

javaswing

2011-10-09 11:05:13

Android 4.0

2014-04-03 09:49:20

設計界面設計

2015-07-09 10:25:45

界面設計UI設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品麻豆日日躁夜夜躁 | 天天拍天天操 | 精品欧美一区二区在线观看欧美熟 | 超碰一区二区 | 日韩一区和二区 | 国产精品不卡一区 | 啪啪免费| 国产精品久久久久久久久久不蜜臀 | 中文字幕av中文字幕 | 日韩欧美中文 | 天天宗合网 | 午夜精品久久 | 日韩中文字幕一区二区 | 91看片| 成人三级在线播放 | 在线免费观看日本视频 | 国产99精品 | www.日韩 | 亚洲天天干 | 欧美成人专区 | av一区二区三区四区 | 黄色综合| 亚洲成人av一区二区 | 在线视频中文字幕 | 国产一级片在线观看视频 | av大片| 久久久99精品免费观看 | av网站免费看| 欧美一级黑人aaaaaaa做受 | 久久久久久久久久久久久9999 | wwww.8888久久爱站网 | 999免费视频 | 久久成人国产精品 | 欧美精品在线观看 | 激情91| 国产视频在线一区二区 | 成年人网站在线观看视频 | 欧美在线观看免费观看视频 | 国产毛片久久久 | 视频在线一区二区 | 精品久久香蕉国产线看观看亚洲 |