RelativeLayout佈局是Android界面佈局中應用最廣也最強大的一種佈局,其不只十分靈活,能夠解決開發中各類界面佈局需求,同時也很方便了解決了多屏幕尺寸的適配問題。在iOS開發中,Autolayout技術老是被讚不絕口,RelativeLayout佈局就是Andriod系統中的Autolayout,其又被稱爲相對佈局。java
所謂相對佈局,是指其座標的肯定並非開發者寫死的,而是有系統自動計算出來的,那麼系統如何計算每一個視圖控件的位置呢?開發者須要爲其添加一些規則進行約束,這些規則大體包括2類:ide
第1類 與父視圖之間位置關係的規則:佈局
此類規則包括在父視圖中的居中、左對齊、右對齊、上對齊、下對齊等。this
第2類 平級視圖之間相對位置關係的規則:spa
此類規則包括同級視圖間對其關係,相對位置關係,例如A在B左側20像素位置,B與C上邊緣對齊等。code
使用RelativeLayout進行佈局示例代碼以下:xml
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout relativeLayout = new RelativeLayout(this); Button button1 = new Button(this); button1.setText("按鈕一"); button1.setId(R.id.button1); RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(200,200); //添加約束 使其靠近父視圖右上角 layoutParams1.addRule(RelativeLayout.ALIGN_PARENT_TOP); layoutParams1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); button1.setLayoutParams(layoutParams1); Button button2 = new Button(this); button2.setText("按鈕二"); button2.setId(R.id.button2); RelativeLayout.LayoutParams layoutParams2 = new RelativeLayout.LayoutParams(200,200); //添加約束 讓其右側靠近按鈕一左側 上側靠近按鈕一下側 layoutParams2.addRule(RelativeLayout.BELOW,R.id.button1); layoutParams2.addRule(RelativeLayout.LEFT_OF,R.id.button1); button2.setLayoutParams(layoutParams2); Button button3 = new Button(this); button3.setText("按鈕三"); button3.setId(R.id.button3); RelativeLayout.LayoutParams layoutParams3 = new RelativeLayout.LayoutParams(200,200); //添加約束 讓其固定距離按鈕二 下方100px 左側邊緣對其 layoutParams3.addRule(RelativeLayout.ALIGN_LEFT,R.id.button2); layoutParams3.addRule(RelativeLayout.BELOW,R.id.button2); layoutParams3.topMargin = 100; button3.setLayoutParams(layoutParams3); relativeLayout.addView(button1); relativeLayout.addView(button2); relativeLayout.addView(button3); setContentView(relativeLayout); }
小提示:使用代碼建立的視圖,能夠經過xml文件配置id,以下:繼承
<?xml version="1.0" encoding="utf-8"?> <resources> <item name="button1" type="id"></item> <item name="button2" type="id"></item> <item name="button3" type="id"></item> </resources>
效果以下圖:utf-8
RelativeLayout佈局中視圖位置的配置主要使用其內部類LayoutParams,這個內部類LayoutParams是繼承自MarginLayoutParams。其中經常使用方法和屬性列舉以下:開發
//設置左邊距 public int leftMargin; //設置上邊距 public int topMargin; //設置右邊距 public int rightMargin; //設置下邊距 public int bottomMargin; //添加一個規則 這個方法添加的規則不須要參照視圖 例如靠近父視圖邊緣 public void addRule(int verb) //添加一個規則 這個方法添加的規則須要一個參照視圖 例如某兩個平級視圖間的位置關係 anchor參數爲視圖id public void addRule(int verb, int anchor) //移除一個佈局規則 public void removeRule(int verb)
用於進行佈局規則配置的參數以下:
/*=======須要使用addRule(int verb, int anchor)方法添加的約束規則==========*/ //將當前視圖約束到某個視圖左邊 public static final int LEFT_OF //將當前視圖約束到某個視圖右邊 public static final int RIGHT_OF //將當前視圖約束到某個視圖上邊 public static final int ABOVE //將當前視圖約束到某個視圖下邊 public static final int BELOW //將當前視圖約束與某個視圖基線對齊 public static final int ALIGN_BASELINE //將當前視圖約束與某個視圖左側對齊 public static final int ALIGN_LEFT //將當前視圖約束與某個視圖上側對齊 public static final int ALIGN_TOP //將當前視圖約束與某個視圖右側對齊 public static final int ALIGN_RIGHT //將當前視圖約束與某個視圖下側對齊 public static final int ALIGN_BOTTOM //將當前視圖約束與某個視圖起始對齊 public static final int START_OF //噹噹前視圖約束與某個視圖末尾對齊 public static final int END_OF /*========須要使用addRule(int verb)方法添加的約束規則====================*/ //約束當前視圖與父視圖左側對齊 public static final int ALIGN_PARENT_LEFT //約束當前視圖與父視圖上側對齊 public static final int ALIGN_PARENT_TOP //約束當前視圖與父視圖上側對齊 public static final int ALIGN_PARENT_RIGHT //約束當前視圖與父視圖下側對齊 public static final int ALIGN_PARENT_BOTTOM //約束當前視圖與父視圖居中對齊 public static final int CENTER_IN_PARENT //約束當前視圖與父視圖水平居中 public static final int CENTER_HORIZONTAL //約束當前視圖與父視圖垂直居中 public static final int CENTER_VERTICAL //約束當前視圖與父視圖起始對齊 public static final int ALIGN_PARENT_START //約束當前視圖與父視圖末尾對齊 public static final int ALIGN_PARENT_END
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:435043639