佈局類別與名稱意義
1.佈局類別
Linear Layout:線性佈局 Relative Layout:相對佈局
Table Layout:表格佈局 FrameLayout :框架佈局
AbsoluteLayout :絕對佈局GridView:網格佈局
Tab Layout:選項卡布局 List View:列表佈局
2.參數設定
layout_margin是控件邊緣相對於父控件的邊距
layout_padding是控件內容相對於控件邊緣的邊距
wrap_content填滿父控件的空白
fill_parent表示大小剛好足夠顯示當前控件裏的內容
match_parent在Android2.2中啓動match_parent,不用fill_parent
² Linear Layout (線性佈局)
layout_gravity 相對於父元素的重力值(默認top|left):
(top|bottom|left|right|center_vertical|fill_vertical|center_ horizontal
|fill_ horizontal | center| fill)
LinearLayout有兩個非常相似的屬性:
android:gravity
android:layout_gravity
他們的區別在於:
android:gravity屬性是對該view中內容的限定.比如一個button上面的text. 你可以設置該text相對於view的靠左,靠右等位置.
android:layout_gravity是用來設置該view相對與父view的位置.比如一個button在linearlayout裏,你想把該button放在linearlayout裏靠左、靠右等位置就可以通過該屬性設置.
android:gravity用於設置View中內容相對於View組件的對齊方式,而android:layout_gravity用於設置View組件相對於Container的對齊方式。
² Relative Layout (相對佈局)
RelativeLayout允許子元素指定他們相對於其它元素或父元素的位置(通過ID 指定)。因此,你可以以右對齊,或上下,或置於屏幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在屏幕的中央,那麼相對於這個元素的其它元素將以屏幕中央的相對位置來排列。如果使用XML 來指定這個 layout ,在你定義它之前,被關聯的元素必須定義。
LayoutParams中特殊的參數 :
< 1>屬性值爲true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相對於父元素完全居中
android:layout_alignParentBottom 貼緊父元素的下邊緣
android:layout_alignParentLeft 貼緊父元素的左邊緣
android:layout_alignParentRight 貼緊父元素的右邊緣
android:layout_alignParentTop 貼緊父元素的上邊緣
android:layout_alignWithParentIfMissing 若找不到兄弟元素以父元素做參照物
< 2>屬性值必須爲id的引用名”@id/id-name”
android:layout_below 在某元素的下方
android:layout_above 在某元素的上方
android:layout_toLeftOf 在某元素的左邊
android:layout_toRightOf 在某元素的右邊
android:layout_alignBaseLine 該控件的baseline和給定ID的控件的Baseline對齊
android:layout_alignTop 本元素的上邊緣和某元素的的上邊緣對齊
android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊
android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊
android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊
< 3>屬性值爲具體的像素值,如30dip,40px
android:layout_marginBottom 離某元素底邊緣的距離
android:layout_marginLeft 離某元素左邊緣的距離
android:layout_marginRight 離某元素右邊緣的距離
android:layout_marginTop 離某元素上邊緣的距離
² TableLayout (表格佈局)
TableLayout 將子元素的位置分配到行或列中。一個TableLayout由許多的TableRow 組成,每個TableRow 都會定義一個 row(事實上,你可以定義其它的子對象)。
TableLayout 容器不會顯示row 、cloumns 或cell 的邊框線。每個row擁有0個或多個的cell;每個cell 擁有一個View對象。
表格由列和行組成許多的單元格。表格允許單元格爲空。單元格不能跨列,這與HTML 中的不一樣。
特殊的參數:
android:stretchColumns 伸展的列的索引
android:shrinkColumns 收縮的列的索引
android:collapseColumns 倒塌的列的索引(即銷燬)
表示兩行兩列的一個表格。 android:gravity=”center”書面解釋是權重比。其實就是讓它居中顯示。
它還可以動態添加里面的每行每列。如下代碼所示:
TableLayout tableLayout = (TableLayout)findViewById(R.id.table01);
TableRow tableRow = new TableRow(this);
TextView temp = new TextView(this);
temp.setText("text的值");
tableRow.addView(temp);
android:stretchColumns=”1,2,3,4″ 它的意思就是自動拉伸1,2,3,4列。
² AbsoluteLayout (絕對佈局)
AbsoluteLayout可以讓子元素指定準確的x/y座標值,並顯示在屏幕上。(0,0)爲左上角,當向下或向右移動時,座標值將變大。
AbsoluteLayout沒有頁邊框,允許元素之間互相重疊(儘管不推薦)。我們通常不推薦使用
AbsoluteLayout,除非你有正當理由要使用它,因爲它使界面代碼太過剛性,以至於在不同的設備上可能不能很好地工作。
LayoutParams中特殊的參數 :
layout_x x方向的座標
layout_y y方向的座標
² FrameLayout ( 幀佈局 )
FrameLayout是最簡單的一個佈局對象。它被定製爲你屏幕上的一個空白備用區域,之後你可以在其中填充一個單一對象。比如,一張你要發佈的圖片。所有的子元素將會固定在屏幕的左上角;你不能爲FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或全部擋住(除非後一個子元素是透明的)。
裏面可以放多個控件,不過控件的位置都是相對位置
LayoutParams中特殊的參數 :
layout_gravity 相對於父元素的重力值(用法同LinearLayout)
注意事項:
各佈局不要亂用各自的屬性。比如把屬於AbsoluteLayout佈局的android:layout_x和android:layout_y用到LinearLayout佈局或RelativeLayout佈局,或者把RelativeLayout佈局的 below,rightof等屬性應用到其他佈局中。這樣做雖然不會報錯,但是根本達不到我們需要的效果。
關於android:layout_width=”fill_parent”和android:layout_height=”wrap_content”,這是對每個佈局寬和高的設置。wrap_content可表示隨着其中控件的不同而改變這個佈局的寬度或高度,類似於自動設置寬和高,fill_parent使佈局填充整個屏幕,另外還有一種match_parent,它本質上和 fill_parent 一樣,並從API Level8開始替代fill_parent。
佈局複用
1、活用include
例如在layout中創建一個名爲include_title.xml的文件。然後在需要添加標題的xml文件中加上 <include layout="@layout/include_title" />這話便可將標題顯示在當前頁面中,
例如:
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include layout="@layout/include_title" />
</LinearLayout>
2、使用extends
在一些頁面中,我們總是需要共用一些頁面顯示效果的功能,例如Toast,Dialog等等。在這時,我們可以將這些東西封裝到一個Activity中,當某個Activity需要使用裏面的功能的時候,只要直接去繼承它們,然後調用相應的方法即可。以下爲製作一個BaseActivity的例子代碼:
import android.app.Activity;
import android.widget.Toast;
public class BaseActivity extends Activity{
/**
* 彈出提示(int)
*
* @param intContent
*/
public void showToast(int intContent) {
Toast.makeText(getApplication(),intContent, Toast.LENGTH_SHORT).show();
}
/**
* 彈出提示(String)
*
* @param intContent
*/
public void showToast(String strContent) {
Toast.makeText(getApplication(),strContent, Toast.LENGTH_SHORT).show();
}
}
當我們需要使用Toast的時候,只要繼承這個BaseActivity這個類,然後直接調用showToast(參數)方法便可以直接彈出Toast,是不是簡單一些呢。
3、類的封裝
在2中講的是將頁面顯示的效果封裝起來,而這裏講的是將功能代碼封裝起來。在一些時候,我們需要重複調用一個功能方法,是不是覺得複製粘貼很麻煩呢,在這時,我們只需要將其功能代碼封裝起來,供以後調用。這也就是MVC模式中的Model層。例如:
我們新建一個名爲Tools的Java類,其代碼爲:
/**
* 工具類
*
*/
public class Tools {
public static void outPut(Object obj) {
System.out.println(obj);
}
}
在這時,假如我們想輸出一個數據的時候,直接調用Tools.outPut(參數)方法便可輸出數據。
4、使用string.xml和color.xml
開發一個APP的時候,我們難免會使用到一些顏色值或者文字,在這時,我們應該將其放在相對應的color.xml或string.xml文件中,這樣不僅提高代碼的複用性,而且也便於修改,而不用到時改點需求的時候,就要到處找出頁面修改其顏色值和文字。
例如:color.xml文件
<?xml version="1.0"encoding="utf-8"?>
<resources>
<color name="transparent">#00000000</color>
<color name="black">#000000</color>
<color name="blue">#5DC0F8</color>
</resources>
使用的時候:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="標題"
android:textColor="@color/blue" />
string.xml的就不舉例了,估計大家都懂了。
5、使用library
當做項目做多的時候,就會發現,其實,很多功能或者效果什麼的,都非常相似,在這時,我們就該收集一下那些基本代碼,將其封裝在一個library中,等到用時直接加載這個library,而不需要重新寫。其實就是和導入開源框架一樣。