Android開發中RelativeLayout相對佈局

Android開發中RelativeLayout相對佈局

        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

相關文章
相關標籤/搜索