1. 程式人生 > >Android Layout布局

Android Layout布局

coo addview 控件 ride 底部 pat 表格 -- 全部

摘自原文: http://blog.csdn.net/llping2011/article/details/9992941

一、Android布局

Android中任何可視化的控件都是從android.veiw.View繼承而來的,系統提供了兩種方法來設置視圖:

  • 使用XML文件來配置View的相關屬性,然後在程序啟動時系統根據配置文件來創建相應的View視圖。
  • 在代碼中直接使用相應的類來創建視圖。

使用XML文件定義視圖:

  每個Android項目的源碼目錄下都有個res/layout目錄,這個目錄就是用來存放布局文件的。布局文件一般以對應activity的名字命名,以 .xml 為後綴。在xml中為創建組件時,需要為組件指定id,如:android:id="@+id/名字"系統會自動在gen目錄下創建相應的R資源類變量。

在代碼中使用視圖:

  在代碼中創建每個Activity時,一般是在onCreate()方法中,調用setContentView()來加載指定的xml布局文件,然後就可以通過findViewById()來獲得在布局文件中創建的相應id的控件了,如Button等。

 1 public class MainActivity extends AppCompatActivity
 2 {
 3     private Button btn;
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState)
6 { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 btn = (Button)this.findViewById(R.id.btn1); 10 } 11 }

二、Android五大布局

  • 線性布局(LinearLayout
  • 單幀布局(FrameLayout
  • 絕對布局(AbsoluteLayout
  • 表格布局(TableLayout
  • 相對布局(RelativeLayout
    • 常用屬性
      // 該組件位於引用組件的左方
      android:layout_toLeftOf
      // 該組件位於引用組件的右方
      android:layout_toRightOf
      // 該組件位於引用組件的上方
      android:layout_above
      // 該組件位於引用組件的下方
      android:layout_below
      // 該組件是否對齊父組件的左端
      android:layout_alignParentLeft
      // 該組件是否齊其父組件的右端
      android:layout_alignParentRight
      // 該組件是否對齊父組件的頂部
      android:layout_alignParentTop
      // 該組件是否對齊父組件的底部
      android:layout_alignParentBottom
      // 該組件是否相對於父組件居中
      android:layout_centerInParent
      // 該組件是否橫向居中
      android:layout_centerHorizontal
      // 該組件是否垂直居中
      android:layout_centerVertical
      // 該組件權重/優先級,表示控件占用空間的比例
      android:layout_weight

      PS:layout_weight -- 指定控件的權重或者優先,最明顯的效果就是與其它控件相比,所占用的空間比例的大小。

  示例:

 1 public class SecondActivity extends Activity
 2 {
 3     private LinearLayout mLinearLayout;
 4     private TextView mTextView;
 5     private Button mBtn;
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState)
 8     {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_second);
11         mLinearLayout = new LinearLayout(this);
12         mLinearLayout.setOrientation(LinearLayout.VERTICAL);
13         mLinearLayout.setBackgroundColor(0xFFFF0000);
14         setContentView(mLinearLayout);
15         mTextView = new TextView(this);
16         mTextView.setText("Second Activity");
17         // 向View中添加子元素
18         mLinearLayout.addView(mTextView);
19         mBtn = new Button(this);
20         mBtn.setText("Back");
21         mLinearLayout.addView(mBtn);
22         mBtn.setOnClickListener(new Button.OnClickListener()
23         {
24             @Override
25             public void onClick(View v)
26             {
27                 // 創建intent,數據傳遞的媒介
28                 final Intent i = new Intent(SecondActivity.this, MainActivity.class);
29                 // 向OS發送進入另一個activity消息
30                 startActivity(i);
31                 // 改變當前Activity狀態為完成,即銷毀.
32                 SecondActivity.this.finish();
33             }
34         });
35 
36     }
37 }

三、屬性區別

  在設置控件屬性時,經常看到android:layout_width與android:width,那麽,這兩者有什麽分別。有"layout_"前綴的,指對整個控件而言,與父控件的關系,而沒有"layout_"前綴的,是對控件本身的文本內容。比如:layout_gravity是指在父控件中的對齊方式,而gravity是控件本身文本內容的對齊方式。layout_margin是指控件級別相同的控件間間距。

  •  屬性列表:
android:layout_width
android:layout_height
android:layout_margin
android:layout_gravity
android:text
android:textColor
android:gravity
android:width
  • match_parent與wrap_parent區別
    • match_parent:設置視圖與其父視圖大小相同。(設置一個控件的布局為match_parent將強制性地使控件擴展,以填充布局單元內盡可能多的空間。)
    • wrap_parent:視圖將根據其內容自動調整大小。(設置一個視圖的尺寸為wrap_content將強制性地使視圖擴展以顯示全部內容。)

Android Layout布局