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

时间:2022-01-27 18:30:18

目录(?)[-]

  1. xml控件代码重用include
  2. xml控件代码重用merge
  3. 横屏和竖屏landsacpe portrait

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);
    ... ... 
}

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

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

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

【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge的更多相关文章

  1. 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

  2. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

  3. 【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Progress Dialog小例子 我们 ...

  4. 【转】 Pro Android学习笔记(九三):AsyncTask(2):小例子

    目录(?)[-] 继承AsyncTask UI操作接口 使用AsyncTask 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn. ...

  5. 【转】Pro Android学习笔记(九):了解Content Provider(下下)

    Content provider作为信息的读出,比较常见的还有文件的读写,最基础的就是二进制文件的的读写,例如img文件,音频文件的读写.在数据库中存放了该文件的路径,我们可以通过ContentPro ...

  6. 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于activity,消息是在OnCrea ...

  7. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  8. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  9. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

随机推荐

  1. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  2. 光盘 iso 镜像制作相关命令操作

    1. 安装制作工具 mkisofs yum install mkisofs -y 2. Linux 操作系统镜像 iso 打包 mkisofs -o /root/.iso \ -V mini7 -b ...

  3. Java Sax解析

    一.   Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode.如下面的这段boo ...

  4. MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)

    本节开始为大家讲解偏向应用的知识--创建对话框.  对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是对话框,知识它做了很多美工方面的工作,将其大大美 ...

  5. Android Activity的启动过程

    文章编辑的太长了,请移步我的csdn博客:http://blog.csdn.net/xyh269 Android Activity的启动过程原文链接:http://blog.csdn.net/xyh2 ...

  6. Understanding continuations

    原文地址http://fsharpforfunandprofit.com/posts/computation-expressions-continuations/ 上一篇中我们看到复杂代码是如何通过使 ...

  7. java线程相关

    java线程相关 java 线程 1 线程的状态 This is an example of UML protocol state machine diagram showing thread sta ...

  8. Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目

    虚拟机目录下的Vagrantfile文件是vagrant的配置文件,如果想把虚拟机当作一台服务器,可以通过ip访问,需要修改配置文件进行配置. (1)第一步:打开虚拟机目录下的Vagrantfile文 ...

  9. for、for in和while以及do while

    for循环:一般用在已知判断条件的循环; for(变量初始化;循环条件判断;循环后的执行){ 代码块 } //变量初始化可以省略,但是分号不能省.有多个的话用逗号隔开 //循环条件判断是true还是f ...

  10. HashMap二三事

    先看看hashmap在整个Collection中的位置 HashMap中存储数据的结构是 /** * The table, resized as necessary. Length MUST Alwa ...