android布局中使用include及需注意点
在android布局中,使用include,将另一个xml文件引入,可作为布局的一部分,但在使用include时,需注意以下问题:
一、使用include引入
如现有标题栏布局block_header.xml,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_header"
android:layout_width="match_parent"
android:layout_height="@dimen/title_bar_h"
android:layout_alignParentTop="true"
android:background="@color/app_main_color"
android:paddingLeft="@dimen/bar_pd_left"
android:paddingRight="@dimen/bar_pd_left"
android:gravity="bottom" >
<ImageButton
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/back"
android:background="@drawable/grid_item_selector"
android:layout_alignParentLeft="true"
android:visibility="invisible" />
<TextView android:id="@+id/label_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/title_size"
android:text="标题栏"
android:textColor="@color/white"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@id/btn_back"
android:paddingBottom="@dimen/bar_pd_bottom"/>
<ImageButton
android:id="@+id/btn_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/setting"
android:background="@drawable/grid_item_selector"
android:layout_alignParentRight="true"
android:visibility="invisible" />
</RelativeLayout>
现在要在activity_main.xml中引入标题栏的布局,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<include
android:id="@+id/bolck_titlebar"
layout="@layout/block_header" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_below="@id/bolck_titlebar" />
</RelativeLayout>
二、在加载了activity_main.xml的Activity.class中,对block_header.xml的控件的操作
【普通控件的使用】
对控件的操作和直接在activity_main中布局的控件的操作一致,如设置标题栏的标题文字如下:
TextView tvTitle = (TextView) findViewById(R.id.label_title);
tvTitle.setText(“title”);
【最外层的layout的使用】
但要注意的是,如果要对block_header.xml中最外层的布局layout_header进行操作,
采用RelativeLayout layoutHeader = (RelativeLayout) findViewById(R.id.layout_header);获得,获得到的对象为null,这是由于我们为include部分设置了id属性。
如果我们没有设置id属性时,同样能够按照以上方式对其进行操作,如我们要设置背景色(没有对include设置id的做法):
RelativeLayout layoutHeader = (RelativeLayout) findViewById(R.id.layout_header);
layoutHeader.setBackgroundColor(Color.BLUE);
如果我们设置了id属性,一些网页介绍通过如下方式获得并对其操作(错误做法):
View layout = getLayoutInflater().inflate(R.layout.block_header, null);
RelativeLayout layoutHeader= (RelativeLayout)layout.findViewById(R.id.layout_header);
layoutHeader.setBackgroundColor(Color.BLUE);
但通过实验,并不能达到我们想要的效果,虽然设置了背景色,但是在activity_main.xml中表现出来的还是没有设置之前的样子,
不难解释,我们通过这种方式获得的对象只是block_header.xml中的layout,并不是我们include进activity_main.xml中的layout,当我们在activity_main.xml设置了include的id,block_header.xml的最外层布局已被映射到include上,所以只需对include的视图进行操作,就相当于对block_header.xml最外层的布局进行操作
具体如下(对include设置了id的做法):
View layoutHeader = findViewById(R.id.bolck_titlebar);
layoutHeader.setBackgroundColor(Color.BLUE);
所以在对被include的布局的最外层布局进行操作时,需要特别注意,如方法不正确,可能会出现报空指针错误或者设置无效等问题。
android布局中使用include及需注意点的更多相关文章
- 【转】在Android布局中使用include和merge标签
内容转自:http://fengweipeng1208.blog.163.com/blog/static/21277318020138229754135/ 在我们开发android布局时,经常会有很多 ...
- Android布局中的空格以及占一个汉字宽度的空格的实现
在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格: 窄空格: 一个汉字宽度的空格: [用两个空格( )占一个汉字的宽度时,两个空格比 ...
- Android布局中的空格以及占一个汉字宽度的空格,实现不同汉字字数对齐
前言 在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格: (普通的英文半角空格但不换行) 窄空格: (中文全角空格 (一个中文宽度)) ...
- android include标签的使用,在RelativeLayout中使用include标签需注意!!!!!
转:http://4265337.blog.163.com/blog/static/195375820127935731114/ include和merge标记的作用主要是为了解决layout的重用问 ...
- Android布局优化之include、merge、ViewStub的使用
本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味 ...
- Android布局优化:include 、merge、ViewStub的详细总结
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要是对上篇博客的补充Android性能优化之UI渲染性能优化, 没有什么新东西,觉得应该是都掌握的玩意,写出来也只是自己做个小小的总结. ...
- Android 布局中 如何使控件居中
首先要分两种不同情况,在两种不同的布局方式下:LinearLayout 和RelativeLayout 1. LinearLayout a). android:layout_gravity=" ...
- Android布局中涉及的一些属性
Android:gravity属性 线性布局常见的就是利用LinearLayout进行布局,其中有个比较重要的属性就是android:gravity,在官方文档中是这么描述这个属性的:指定一个元素怎么 ...
- android 布局中 layout_gravity、gravity、orientation、layout_weight【转】
线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是 ...
随机推荐
- java布局(每个名字都是有意义的)
一.FlowLayout 1.流水布局:从左至右,排满换行 2.构造函数有三种: (1)FlowLayout() (2)FlowLayout(align) (3)FlowLayout(align, h ...
- 使用JAXP对xml文档进行DOM解析基础
XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式. sax: ...
- Maven配置tomcat和jetty插件来运行项目
针对eclipse中的Run on Server有些情况下并不是那么好操作,比如配置maven下的springmvc插件,如果使用此方法运行会很容易出现组件缺少导致错误出现一大堆的问题. 那么针对这种 ...
- AnsiString类型定义的时候可以直接指定代码页,比如950繁体字,936日文
procedure TForm3.FormCreate(Sender: TObject); type AnsiStringForPage = type AnsiString(950);//代码页 va ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十五:IT人屈辱之道-十倍奉還
現代人普遍火氣都很大,與人爭論時只要有一點點感到屈辱,便會開始大聲反擊,甚至於暴力相向.至於企業中的人事相鬥,則是典型的來個明爭暗鬥,直到成為老闆眼中的紅人,在逐漸掌握了權力之後再來個內部大清洗,不久 ...
- Android自己定义组件系列【6】——进阶实践(3)
上一篇<Android自己定义组件系列[5]--进阶实践(2)>继续对任老师的<可下拉的PinnedHeaderExpandableListView的实现>进行了分析,这一篇计 ...
- 百科知识 DMG文件如何打开
1 DMG格式是在MAC系统上的一个镜象文件,也可以说是压缩文件,如果你是使用苹果机或在PC上装了MAC OS X for X86,在MAC系统上双击这个文件就可以解开了:现在在Windows平台,我 ...
- Webduino Smart 从入门到起飞
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 试用了一下,感觉这板子+WebduinoBlockly在线开发环境,下限低.上限也低,以后肯定要刷其他固件的.举个简单的例子,WB ...
- Codeforces Round #313 (Div. 2) ABC
A http://codeforces.com/contest/560/problem/A 推断给出的数能否组成全部自然数. 水题 int a[1010]; bool b[1000010]; int ...
- canvas转盘抽奖的实现(二)
本篇是<canvas转盘抽奖的实现(一)>的另一种实现方法,主要通过css3的transform以及transition过渡来实现. // ' + r + '等奖'; } draw ...