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

Android用戶界面設(shè)計:相對布局

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

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

什么是相對布局

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

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

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

注意:規(guī)則要求每個子控件恰當(dāng)?shù)卦O(shè)置了它的id屬性。

一個簡單的相對布局

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

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

 

#p#

 

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

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

XML布局資源必須存儲在/res/layout項目目錄下。讓我們看看前一節(jié)介紹的相對布局。這個布局資源文件,恰當(dāng)?shù)孛麨?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文件中,這行代碼應(yīng)該是:

  1. setContentView(R.layout.relative); 

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

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

◆EditText01:顯示在Button01的左邊

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

用程序定義相對布局

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

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

  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代碼。首先我們像平常一樣創(chuàng)建一個EditText控件。我們給它一些RelativeLayout參數(shù),然后設(shè)置它的規(guī)則。在這里,我們?yōu)镋ditText控件創(chuàng)建2個規(guī)則。

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

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

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

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

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

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

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

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

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

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

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

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

現(xiàn)在讓我們來實踐這些規(guī)則吧!

使用布局規(guī)則

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

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

 

 

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

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

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

  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控件(第個一種顏色)。像平常一樣配置它們,設(shè)置文本屬性為字符串,背景色,字號等等。將這些控件都放到相對布局中。

步驟3:定義相對布局規(guī)則

接下來,我們?yōu)槊總€子控件定義規(guī)則,以使它們被繪制到合適的位置:

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

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

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

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

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

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

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

如果你在你的XML資源文件中定義這些規(guī)則,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屬性以使規(guī)則正確應(yīng)用。

◆當(dāng)心循環(huán)規(guī)則。循環(huán)規(guī)則發(fā)生在兩個控件具有互相指向的規(guī)則時。如果你在布局設(shè)計中使用了循環(huán)規(guī)則,你將會得到以下錯誤信息:

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

◆回憶一下相對布局規(guī)則的應(yīng)用被一次處理是很有用的

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

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

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

總結(jié)

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

【編輯推薦】

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

2011-04-22 11:01:36

框架布局界面設(shè)計Android

2011-04-11 17:25:30

線性布局用戶界面設(shè)計Android

2011-04-11 17:07:33

布局基礎(chǔ)用戶界面設(shè)計Android

2011-05-19 08:49:01

使用片段界面設(shè)計Android

2011-04-08 13:58:10

Android界面設(shè)計

2011-06-01 10:58:57

2011-06-01 10:30:41

用戶界面

2011-12-20 10:42:22

Android應(yīng)用界面設(shè)計

2011-03-02 14:03:02

DashboardAndroid用戶界面反例模板

2011-03-02 10:49:42

DashboardAndroid用戶界面設(shè)計模板

2013-11-27 10:12:11

2012-01-16 16:16:49

JavaSwing

2013-12-26 15:46:30

Android開發(fā)Android應(yīng)用用戶界面設(shè)計

2011-06-01 16:50:05

Android ListView

2014-11-26 10:42:55

界面設(shè)計

2011-06-01 09:31:46

用戶界面設(shè)計

2012-01-16 11:03:09

javaswing

2011-10-09 11:05:13

Android 4.0

2014-04-03 09:49:20

設(shè)計界面設(shè)計

2015-07-09 10:25:45

界面設(shè)計UI設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本免费黄色一级片 | 一级做a爰片性色毛片 | 91久色| 在线婷婷 | 在线播放亚洲 | 亚洲欧美日韩久久 | 日韩午夜在线播放 | 中文字幕第一页在线 | 国产精久久久久久久 | 亚州综合在线 | 日韩在线观看中文字幕 | 情侣酒店偷拍一区二区在线播放 | 欧美a在线| 精品久久久久久久 | 国产成人免费 | 国产午夜精品理论片a大结局 | 成人精品一区二区三区中文字幕 | 欧美成人自拍视频 | 久久精品国产亚洲一区二区三区 | 亚洲影音先锋 | 亚洲一区av | 在线观看国产视频 | 精品国产欧美一区二区三区成人 | 337p日本欧洲亚洲大胆 | 中文字幕不卡一区 | 欧美亚洲视频在线观看 | 国产成人99久久亚洲综合精品 | 视频一区二区在线观看 | 午夜精品一区二区三区在线观看 | 在线观看成人小视频 | 99热都是精品 | 成人网在线看 | 国产美女久久久 | hsck成人网| 国产一级免费视频 | 精品久久久久久久久久久下田 | 亚洲欧洲成人在线 | 久久丝袜 | 亚洲一区二区三区免费观看 | 色视频一区二区 | 亚洲精品小视频在线观看 |