天天看點

Android學習筆記(十):Activity-TableLayout和ScrollView

無涯和有涯

正看我下載下傳的資料,正式雄心勃勃想看這個和看那個之際,腦際中閃現了莊子的一句話:以有涯追無涯,殆矣。Oh~。前段時間IBM有個人機比賽,人輸了,比的大概有點像百科全書之類的知識。知識是無涯的,但是知識不等于智慧,而智慧正式我們追究,智慧有涯還是無涯?好像是幾個月前,山東教育局要求閹割三字經,貌似呵護學生,實際不讓學生思考,分辨真僞,隻是灌輸,這就如同和電腦比賽百科全書,我要部電腦就可勝出,而智慧不是。不管的AI能發展到什麼程度,知識可以增長,智能可以增加,但是智慧是人和機器的差異。我們的教育隻在乎灌輸知識,而不在于教導智慧,教導學習,教導思考。這就是為什麼我們的中國小的成績如此優異,包括實體,數學的國際國際奧林匹克(奧數是奇技淫巧,不是智慧所在),然則我們的大學确是無力。

TableLayout

在某些UI設計中,也稱為GridLayout。我們根據行和列的排列來對widget進行布局。整個邏輯和我們在HTML中寫table的方式相似,定義表格然後以行為機關,然後在定制單元表格,即每一個widget,如果widget需占用多個單元采用android:layout_span="num"的方式。

第一個表格單元為(0,0)。widget是按順序放入表格的,如果我們希望中間跳過幾個表格單元,可以指定widget具體在哪一列,例如android:layout_column="2",即放在第3列,那麼下一個widget将是第4列或者下一行。需要注意的是,和Table一樣,這些表格的大小并不一定是一樣的,将根據widget的natrual大小。這可能和我們的期望不一樣。下面是一個例子:

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

<!-- android:stretchColumns的值為一個column的列号,注意列号是從0還是,如果有多個列号,用逗号作為分割。這些列将盡可能填滿剩餘的空間,這對于小于有效空間的情況非常有用。如果不設定,則采用widget的natrual的大小,将不會填滿橫排剩餘的空間。在程式中可以是setColumnStretchable()—>

  android:stretchColumns="1" >

    <TableRow>

        <TextView android:text="URL:" />

<!--如果我們不設定 android:stretchColumns="1",EditText這裡是沒有内容,是以它的natrual的width為0,即看不到。當我們設定row 1的兩個button填入 column2和3,那麼column 2和3将為适配為button的大小,而column1為1,這會導緻如圖所示的畫面 -->

        <EditText android:id="@+id/entry"

          android:layout_span="3" />

    </TableRow>

    <TableRow>

         <Button android:id="@+id/cancel"

                 android:layout_column="2"

                 android:text="Cancel" />

         <Button android:id="@+id/ok"

                 android:text="Ok" />

    </TableRow>

</TableLayout>

android:stretchColumns:如同将上面例子。

android:shrinkColumns,将盡可能壓縮column空間,例如在上面的例子在Row0中我們加入:

<TextView android:text="1234567899" />

<TextView android:text="hello my friend!" android:textColor="#0000ff" />

<TextView android:text="1234567899" />

Android學習筆記(十):Activity-TableLayout和ScrollView

運作時如上左圖,最後一列看不到完整,我們可以在TableLayout中加入屬性:android:shrinkColumns="4,5",這樣就可以如第二個圖。在java code中可以使用setColumnShrinkable()。

Android學習筆記(十):Activity-TableLayout和ScrollView

android:collapseColumns:可以将某些列invisible,可用于向使用者顯示他們需要的或者重要的内容,而隐藏次要的,在java code中可以使用setColumnCollapsed()。我們将android:collapseColumns="4,5"替換了shrinkColumns的屬性,效果如右圖。

在TableRow之間可以放入widget,這時TableLayout就如同數值排放的LinearLayout的行為,并自動的将width設定為fill_parent。

ScrollView

顧名思義就是可以滾屏。ScrollView的處理很簡單:

<ScrollView xmlns:android...  android:layout_width...  android:layout_height...>

//裡面可以是其他Layout的布局,例如TableLayout,但是我們嘗試了在一個ScrollView中又兩個TableLayout出現錯誤,目前不太清楚為什麼。

</ScrollView> 

需要注意的是ScrollView不提供雙向(橫+豎)的scroll,隻提供單向的。

相關連結: 我的Android開發相關文章