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

时间: 2024-10-11 01:03:58

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

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

目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 <?xml version="1.0" encoding="utf-8"?> <Button xmlns:android=

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

目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续探讨BaseAdapter 我们可以同继承抽象类BaseAdapter来实现自己的Adapter,自己设置子View的UI,不同子View可以由不同的布局,并自己进行数据和子view中数据的对应关系.图是例子的呈现结果,我们有很多图标,对这些图标按一定大小进行缩放,然后布局在GridView中.这个

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

目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类,所以可以作为view嵌入到其他的layout中.Android的layout有LinearLayout.TableLayout,RelativeLayout.FrameLayout.GridLayout. 线性布局:LinearLayout 这是最常用的,有anroid:orientation来确

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

目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只含有一个ListView的Activity,并通过setListAdapter()方法来管理adapter.我们可以通过扩展ListActivity来实现. 我们要在整个屏幕上显示ListView,我们直接继承使用ListActivity,不需要在定义自己的layout XML文件,我们在上一学习中

【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和theme有关,如果theme设置不正确,还可能会出现异常. 相关的代码如下: public class ListActionBarDemo extends SearchTestCase3 implements OnNavigationListener{ //List触发的回调函数接口    @Ov

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transaction进行切换,很方便提供切换的效果. 利用setTransition() 在Pro Android学习笔记(三九):Fragment(4):基础小例子-续的“Step 4:实现showDetail(int index),如何管理fragment”中,介绍了如何在容器FrameLayout中通过frag

【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见Pro Android学习笔记(六四):安全和权限(1):签发apk,我们将对package做进一步了解. 每个apk都有一个唯一的根包名,在AndroidManifest.xml中定义,如下.开发者为包进行签发,前面和包名绑定,其他开发者不能对这个包进行更新. <?xml version="1

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we