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