Android UI Layout 之 AbsoluteLayout

 

 在 Android UI 中,最基本的構建單位(building block)是 android.view.View。一個 View 佔據屏幕上的一個矩形區域,並負責該區域的繪畫和事件處理。View 有一些子類,比如 ImageView、TextView 等可分別用來顯示圖像、文字…… View 還有一個特殊的子類 ViewGroup,ViewGroup 在 UI layout 中充當“容器”的角色,用以“包含”其他 View 以及 ViewGroup:

viewgroup.png

  由於 ViewGroup 是一個 abstract class 無法直接實例化,所以在 layout 中真正充當“容器”角色的應該是 ViewGroup 的子類 :AbsoluteLayout、 FrameLayout、 LinearLayout、 RelativeLayout 等。在實際的 UI 編程中,使用不同的 Layout 類作爲容器,對該容器中的各個子 View 的排列方式有很大影響。比如,LinearLayout 中的各個子 View 按照橫向或者縱向線性排列;而 AbsoluteLayout 中各個子 View 可以指定以像素爲單位的“絕對”位置。AbsoluteLayout 的這種“絕對”定位的佈局方式和我們非常熟悉的 Windows 編程中的 SetWindowPos() 或 Form1.Left = 10 的佈局方式是一樣的,比較簡單:

  現在我們新建一個 Android 工程中,在其主 Activity 類中添加如下三個成員:
private AbsoluteLayout al;
private TextView tv;
private View v;

改寫這個類的 onCreate 方法如下:
public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

  構造一個 AbsoluteLayout,設置其背景色
        al = new AbsoluteLayout(this);
        al.setBackgroundColor(Color.YELLOW);
  構造一個 TextView 並設置其 text 和 背景色
        tv = new TextView(this);
        tv.setText("Android is a software stack for mobile devices that includes an operating system, middleware and key applications. ");
        tv.setBackgroundColor(Color.BLUE);
   用該 View 在父 View 中的 width,height,x,y 作爲參數構造一個 AbsoluteLayout.LayoutParams
        AbsoluteLayout.LayoutParams tvLP = new AbsoluteLayout.LayoutParams(70, 50, 10, 20);
  把這個 TextView 加入到 AbsoluteLayout 中,並應用上一步創建的 LayoutParams。這樣 TextView 就會顯示在我們指定的位置上了。
        al.addView(tv, tvLP);
       
        v = new View(this);
        v.setBackgroundColor(Color.RED);
        AbsoluteLayout.LayoutParams vLP = new AbsoluteLayout.LayoutParams(70, 50, 90, 70);
  也可以先爲子 View 設置 LayoutParams,然後再調用一個參數的 ViewGroup.addView(View) 來添加。效果是一樣的。
        v.setLayoutParams(vLP);
        al.addView(v);
       
  設置 al 爲本 Activity 的 content
   這樣,在該 Activity 被調用時,就會顯示該 AbsoluteLayout 和其子 View
        this.setContentView(al);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章