1. 程式人生 > >Android學習筆記 八 Activity OpenMenu和LinearLayout

Android學習筆記 八 Activity OpenMenu和LinearLayout

設定文字顯示

繼承ViewText的widget有以下集中設定文字顯示的方式:一、在Android XML中 android:text="xxxxx"中設定;二、在程式中通過widget.setText("xxxx");三、在res/values/strings.xml中設定,然後通過R.string.xxx在Android或者在程式中使用。對於要適配多國語言,建議採用第三種方式,只需對stings.xml的相關詞彙進行翻譯即可。

OptionMenu

在手機上,有一個Menu按鈕,按下後,可以顯示OptionMenu,如下處理

    @Override    public boolean onCreateOptionsMenu

(Menu menu) {        // TODO Auto-generated method stub        //add(int groupId, int itemId, int order, int titleRes),對於exit的menuItem,0表示GroupId,1表示ItemId,這兩個Id將用於Menu按下後觸發回撥函式中用於判斷具體是哪個menuItem,第三個表示拜訪的順序,在這裡第一個是exit,第二個是about,第四個引數引向strings.xml中定義的內容。        menu.add(0,1,1,R.string.menu_exit);        menu.add(0,2,2,R.string.menu_about);        return super.onCreateOptionsMenu(menu);
    }

建立的Menu後,需要觸發回撥函式,這也是一個override的方法,如下處理:

    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // TODO Auto-generated method stub        if(item.getItemId() == 1){ //在這個例子中我們只有一個group,所有隻需檢查itemId就可以了。            finish();        }else if(item.getItemId() == 2){            ... ...         }        return super.onOptionsItemSelected(item);

    }

LinearLayout

從上至下,或從左到右。是box model,基於方塊依次順序方式排列。RadioGroup是LinearLayout的繼承項

orientation

在Android XML中使用android:orientation,值為horizontal或者vertical,排版將是水平從左到右,或者豎直從上到下。在java程式中,我們可以通過setOrientation() 來改變方向,例如setOrientation(LinearLayout.HORIZONTAL);

fill model

一個widget根據其內容有一個最合適的大小,也就是natural大小,然則我們通才需要根據容器的大小進行排版,在LinearLayout中android:layout_width和android:layout_height是必須設定的,有三種方式:1)指定尺寸,例如125px表示125pixels2)wrap_content,這就是natual的尺寸3)fill_parent:填滿容器剩餘的尺寸。

fill_parent將會使用剩餘所有的空間,哪怕是後面還有widget,也就將空間填滿。而我們並不希望如此,希望剩餘的widget仍然有效的排列,而是希望將其他widget排列後的剩餘空間。我們將使用layout_weight的屬性。

weight

layout_weight和wrap_content共同使用,預設layout_weight為0,也就是size為natural size。(如果和fill_parent相結合,其結果無法預測,因此需特別注意)如果我們希望widget使用了剩餘的空間,那麼可以設定layout_weight一個有效值。這裡是權重,如果有多個widget,就按此權重來分配剩餘的空間。如果所有的layout_weight一樣,這些widget就對剩餘空間進行等分。有時我們會看到不一定很嚴格按照設定的權重比例來分配空間,必須能支援natural的大小,所以可能會有適配。

Gravity

線性佈局從上到下,或這從左到右,可以使用gravity,提供align的方式,不按此順序。對於android:layout_width="wrap_content" ,android:layout_gravity可以設定為left, center_horizontal, righ。在JAVA程式碼中,可以使用 setGravity(),例如setGravity(Gravity.LEFT); setGravity(Gravity.CENTER_HORIZONTAL);

需要注意的是在widget中也是有相應的屬性,android:gravity,這裡指的是widget中文字在widget中的排放位置,例如android:gravity="right"。

右圖是button結合weight和gravity的例子

  <EditText      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_weight="1"      android:singleLine="false"      android:text="test1"      android:layout_gravity="left"      />  <EditText      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_weight="2"      android:singleLine="false"      android:text="test2/ncenter_horizontal"      android:layout_gravity="center_horizontal"      />  <EditText      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_weight="1"      android:singleLine="false"      android:text="test3/nLine_2/nLine_3"      android:layout_gravity="right"      />

如果我們將第三個的android:layout_gravity="right"改為android:gravity="right",結果如下圖:

Pad和Margin

預設地,各widget之間是緊密排列的,如果需要留邊,可以採用padding的方式,如圖所示。在XML中使用android:padding,android:paddingLeft, android:paddingRight,android:paddingTop, 和android:paddingBottom。在Java code中可以使用setPadding() 來處理。例如android:paddingTop="30px"。

需要注意的是,如果設定背景android:background,那麼包括widget和padding的區域都是看不到背景的。也就是widget實際上包含了padding的尺寸。為了避免這種情況,我們可以使用margin來替代,例如android:layout_marginTop,例如android:layout_marginLeft="100px"

通俗地,padding可以理解為widget的內邊框,margin可以理解為外邊框。