Android 布局详解

摘要:
Android布局详解1.重用布局当一个布局文件被多处使用时,最好标签来重用布局。若原根节点已经设置了android:id属性值,那么标签的android:id属性值将被覆盖workspace_screen.xml布局文件中的根节点的android:id属性值。这样就可以在res/layout目录中放置横屏和竖屏都需要用到的布局,而在res/layout-land和res/layout-port目录中的布局文件可以使用标签引用这些布局。所谓本地化目录就是满足特定要求的资源文件存放的目录,例如,屏幕的尺寸、不同的android版本、不同的语言环境、不同的屏幕方向等等。

Android 布局详解

1.重用布局

当一个布局文件被多处使用时,最好<include>标签来重用布局。

例如:workspace_screen.xml的布局文件,在另一个布局文件中被重复使用三次,那么可使用如下的布局代码:

<LinearLayout

androd:layout_width=”fill_parent”

androd:layout_height=”fill_parent”>

<!--引用三次workspace_screen-->

<includeandroid:id=”@+id/cell1layout=”@layout/workspace_screen”/>

<includeandroid:id=”@+id/cell2layout=”@layout/workspace_screen”/>

<includeandroid:id=”@+id/cell3layout=”@layout/workspace_screen”/>

</LinearLayout>

上面的代码中的<include>标签还使用了一个android:id属性,实际上,该属性指定的是workspace_screen.xml布局文件中的根节点的android:id属性值。若原根节点已经设置了android:id属性值,那么<include>标签的android:id属性值将被覆盖workspace_screen.xml布局文件中的根节点的android:id属性值。<include>标签还可以覆盖被引用的布局文件根节点额所有与布局有关的属性(也就是以“android:layout_”开头的属性)。通过覆盖属性值,可以使被引用的布局文件中的视图拥有不同的布局风格。例如,下面的布局文件代码引用了image_holder.xml文件两次,但只有第一个<include>标签覆盖了一些属性:

<!--覆盖了根节点中的widthheight-->

<includelayout=”@layout/image_holder”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”/>
<!--下面的没有覆盖任何属性-->

<includelayout=”@layout/image_holder”/>

注意:如果像覆盖布局的尺寸,必须同时覆盖android:layout_widthandroid:layout_height。不能只覆盖其中一个属性,否则对这两个属性值的覆盖都无效。

<include>标签在设计与设备相关的布局文件时非常重要,例如,将手机横屏(landscape)和竖屏(portrait)时可以使用不同的布局文件,但有可能横多视图的布局是相同的。这样就可以在res/layout目录中放置横屏和竖屏都需要用到的布局,而在res/layout-landres/layout-port目录中的布局文件可以使用<include>标签引用这些布局。

2.布局别名

res目录下的所有子目录都是资源目录,例如res/valuesres/layout等。这些木中存储的都是默认的资源。但在满足某些情况下系统需要使用另外的资源,例如,支持国际化的程序如果当前环境是中文,就要求所有字符串资源从res/values-zh目录中去读,若环境是英文的,则要去res/valuse-en中去读。其中res/values-zhres/valuse-en就是本地化资源目录。所谓本地化目录就是满足特定要求的资源文件存放的目录,例如,屏幕的尺寸、不同的android版本、不同的语言环境、不同的屏幕方向等等。若果系统方向没有满足当前特定要求的本地化资源目录,就会从默认的资源目录中去寻找资源。例如,现在本地资源目录只有res/values-zhres/values-en,而当前语言环境为法语,但没有res/values-fr目录,所有系统会到默认的资源目录中寻找资源目录(res/values)寻找相应的字符串资源。

所谓布局别名就是为不同的布局文件指定同一个资源ID,以便在不同的环境下系统可以使用同一个布局资源ID访问不同的布局资源。使用布局别名必须注意布局文件的引用只能放在本地化资源目录中,而不能放到默认的资源目录(res/values)中。例如:

假如在res/layout目录中有两个布局文件:main_layout.xmlmain_layout_en.xml,并且在主窗口中使用setContentView(R.layout.main_layout)main_layout.xml与当前窗口关联。现在建立一个res/values-en目录,然后在该目录下建立一个refs.xml文件(资源文件名可以任意命名),最后在refs.xml文件中输入如下内容:

<resources>

<!--main_layout_en.xml文件指定一个名为main_layout的别名-->

<itemname=”main_layout”type=”layout”>@layout/main_layout_en</item>

</resources>

如果当前环境正好是英文,系统就会使用res/values目录中的资源,所以会为main_layout_en.xml文件指定一个别名。如果别名正好与某一个布局文件的资源ID相同,那么就相当于修改该资源ID的指针,也就是说如果在英文环境下,R.layout.main_layout引用的不再是main_layout.xml,而是main_layout_en.xml

一般如果目录中的文件太乱,需要整理一般有两种处理方式:

①建立若干个子目录,然后分门别类地将目录的文件放到这些刚建立的目录中。

②不移动元目录中的文件,而是为每一个文件建立一个索引(可以将这些索引数据存储在数据库或其他文件中),然后对这些索引进行分组管理。这么做的好处是并不需要移动文件,而且同一个文件还可以属于不同的类别。如果采用第一种方式,就需要将文件所属的每个类别对应的目录都复制一份,浪费空间。

3.动态装载布局

Android 布局详解第1张例如,主布局文件(activity_load_layout.xml)只包含一个<LinearLayout>标签,并未包含任何子标签(item.xml),因为所有视图都是动态加载的。

如果需要动态装载、添加视图,桐城在主窗口类(LoadLayoutActivity)中调用LayoutInflatable.inflate方法创建一个新的视图,inflate方法的原型如下:

publicViewinflate(intresource,ViewGrouproot);

resource:表示要装载的视图IDroot:表示要装载的视图的父视图。如果没有父视图,则为null

4.动态设置布局属性

动态添加视图时是不会采用静态方法设置布局,而要想重新设置布局属性,就需要使用LayoutParams类。但要注意,由于主窗口布局使用的是LinearLayout布局,所以要使用android.widget.LinearLayout.LayoutParams类。修改后的LoadLayoutActivity类的代码如下:

publicclassLoadLayoutActivityextendsActivity{

@Override//设置所有控件居中显示

protectedvoidi=onCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

LinearLayoutparent=(LinearLayout) getLayoutInflater().inflate(R.layout.sctivity_load_layout,null);

for(inti=0;i<10;i++){

Viewview=getLayoutInflater().inflate(R.layout.activity_load_layout, null);

TestViewtextView=(TestView)view.findViewById(R.id.textview);

text.setText(“text”+i);

//创建LayoutParams对象

android.widget.LinearLayout.LayoutParamslayoutParams=new LinearLayout.LayoutParams(LayoutPatams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

//设置gravity字段的值(水平居中)

layoutParams.gravity=Gravity.CENTER_HORIZONTAL;

//动态添加视图是指定父视图(LinearLayout)的布局参数

parent.addView(view,layoutParams);

}

setContentView(parent);

}

}

5.从右向左布局(RTLLayout

Android4.2开始,AndroidSDK支持从右向左UI布局的方式。

免责声明:文章转载自《Android 布局详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇P2P简介URL的反向解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux用户,用户组,文件权限

一: 1) 新建用户natasha,uid为1000,gid为555,备注信息为“master” 2) 修改natasha用户的家目录为/Natasha 3) 查看用户信息配置文件的最后一行 4) 为natasha用户设置密码“123” 5) 查看用户密码配置文件的最后一行 6) 将natasha用户账户锁定 7) 将natasha用户账户解锁 8) 新建...

Makefile的学习笔记 .

http://blog.csdn.net/edisonlg/article/details/7171641 1Makefile GNU make的工作分为两个阶段。在第一阶段,make读取makefile文件、内置变量及其值、隐含规则和具体规则、构造所有目标的依赖关系以及所有目标各自的依赖等。在第二阶段,make决定需要重新构造的目标并使用必要的规则进行工...

svn基本命令使用

1、svn help:可以通过该命令查看svn的所有操作命令,包括命令的缩写 2、首先需要从svn库中checkout对应的项目:  (1)svn项目路径为svn://192.168.1.1/myproject/doc,将项目路径下的文件checkout到/home/test目录下,若没有/home/test路径会自动创建,同时只将doc中的子目录和文件...

使用 VisualVM 进行性能分析及调优

VisualVM 是一款免费的集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。   概述 开发大...

Linux 压缩与解压命令

1.    zip与unzip命令   zip 用于压缩文件,压缩为*.zip文件。 unzip 用于解开被zip压缩过的文件。 (1) zip [选项] 压缩后的名称 文件或目录   选项:     选项较多,不一一详细介绍。     -d :从压缩文件内删除指定的文件;     -r :递归处理,将指定目录下的所有文件和子目录一并处理;   例:   ...

windows CMD大全

windows CMD大全参考:https://www.cnblogs.com/accumulater/p/7110811.html 一、打开CMD界面流程: CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)     二 、CMD命令锦集 A:基本操作命令       1. gpedit.ms...