Android学习笔记(八):Activity-OpenMenu和LinearLayout

    技术2022-05-19  22

    设置文本显示

    继承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开发相关文章


    最新回复(0)