Pro Android学习笔记(二九):用户界面和控制(17):include和merge

xml控件代码重用:include

如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式。例如定义my_button.xml如下

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:textColor="#FF0000"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

在布局中,我们将重复使用到这段代码,如下处理:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout … …" >
    <include android:id="@+id/include_one"
        layout="@layout/my_button" />  <!-- 我们可以增加某些属性,例如android:id -->
    <include  android:id="@+id/include_two"   
        layout="@layout/my_button"
        android:text="Happy"  />  <!-- 测试,不是所有的属性增加都是有效,例如android:text,需要通过id获取在代码中重置 -->
</LinearLayout>

我们不仅可以引用重复代码,还可以对属性进行增加和修改。但是增加和修改受到某些限制,有时并不起效果,这点必须要注意。

如果代码中含有多个控件,根据XML的格式,我们不可以平行地摆放多个控件,很简单,将它们放置在layout中就可以,例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout …… >
    <View1 …… />
    <View2 …… />
       …….
</LinearLayout>

xml控件代码重用:merge

如果我们有多个控件,将他们放置在某种布局的的layout中。那么回出现layout的嵌套。这种嵌套有时是没有必要的,例如将一个LinearLayout放置在LinearLayout,这会降低代码的效率。有时我们并不希望在重用代码中就设定布局格式,这时这种方式就不合适。对于这多种控件,重复代码的xml文件,可以使用merge,如下:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <View1 …… /> 
    <View2 …… />
     ……
</merge>

在进行代码合并时,系统会去掉merge。

横屏和竖屏:landsacpe & portrait

为了实现美观,横屏和竖屏可能会采用不同的排版方式,可在layout-land/,layout-port/中进行设置,而layout/则是缺省的。即使我们设置了layout-land/和layout-port/,我们仍应设置缺省的layout/,因为还有一种很少使用的layout-square,即使我们同时也设置了这种少有的方形,仍应当将缺省的进行设置。因为我们不清楚具体运行应用的android版本,有没有新的类型出现,设置缺省布局是最保险的方式,此外也可以避免某种情况,无法匹配资源变更,必须采用缺省。具体见Pro Android学习笔记(四):了解Android资源(下)的最后部分“资源和配置的变更”。

有些情况,我们需要强制横屏或者竖屏,而不是根据重力感应器或者陀螺仪这里传感器来监测手机的实际摆放情况。例如图片播放或者视频播放。即时我们在XML中设置为android:orientation="vertical",仍可以在代码中强制设置方向:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    ... ...
}

下面是例子,左图是普通情况,右图在代码中强制设置方向为横屏。

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值