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表示125pixels
2)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可以理解为外边框。

相关链接: 我的Android开发相关文章

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。