- 浏览: 528721 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
参考android文档:《Layout Tricks:Merging》
先得说下关于<merge></merge>标签的第一个比较简单的用法。如果我们使用FrameLayout作为activity's content view的父元素(也就是在main.xml里把它写在最外层),那么可以考虑用<merge></merge>替换<framelayout></framelayout>标签。官方文档给出的解释是这样做可以减少一级布局层次达到优化布局的效果。这是文档里关于这部分结论的原文,个人E文水平有限,直接贴出来好了:
Obviously, using <merge></merge> works in this case because the parent of an activity's content view is always a FrameLayout. You could not apply this trick if your layout was using a LinearLayout as its root tag for instance.
关于merge和include标签的使用,直接用实例说明吧。
TestMergeInclude.java
public class TestMergeInclude extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:okcancelbar="http://schemas.android.com/apk/res/test.mergeinclude"><imageview android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaletype="center" android:src="@drawable/wallpaper_rainbokeh"></imageview><test.mergeinclude.okcancelbar android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:paddingtop="8dip" android:gravity="center_horizontal" android:background="#AA000000" okcancelbar:oklabel="Save" okcancelbar:cancellabel="Don't save"></test.mergeinclude.okcancelbar></merge>
OkCancelBar.java
public class OkCancelBar extends LinearLayout {
public OkCancelBar(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public OkCancelBar(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
setOrientation(HORIZONTAL);
setGravity(Gravity.CENTER);
setWeightSum(1.0f);
LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.OkCancelBar, 0, 0);
String text = array.getString(R.styleable.OkCancelBar_okLabel);
if(text == null) text = "Ok";
((Button)findViewById(R.id.okcancelbar_ok)).setText(text);
text = array.getString(R.styleable.OkCancelBar_cancelLabel);
if(text == null) text = "Cancel";
((Button)findViewById(R.id.okcancelbar_cancel)).setText(text);
array.recycle();
}
}
okcancelbar.xml
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android"><include layout="@layout/okcancelbar_button" android:id="@+id/okcancelbar_ok"></include><include layout="@layout/okcancelbar_button" android:id="@+id/okcancelbar_cancel"></include></merge>
okcancelbar_button.xml
<?xml version="1.0" encoding="utf-8"?>
一点思考:
1.在OkCancelBar类的构造器中,我们看到一段稍微复杂点儿的代码。其实它们并不难,只是通过ID拿到某个特定的Button引用,然后为其设定要显示出来的文字。与直接使用android:text相比,这种设置要累赘得多。所以不妨把这个累赘看成是为利用<merge></merge>的优点所付出的代价。这个优点就是组件重用,我们只在
okcancelbar_button.xml文件里声明了一个Button,但在使用时却拥有了两个(当然可以更多)Button。
2.这里可重用组件(这里的okcancelbar_button)的定义很关键,因为它关联着所有要使用它的功能点。比如:如果你确定在你的应用里,所有使用到这个button的地方需要的显示文字都一样,那你就可以在上面button的定义中再加一个android:text属性,这样就省去了使用时再去逐个设置的麻烦。另外,本例的okcancelbar_button里只定义了一个button,我想这里应该可以扩展到一个布局单元,比如LinearLayout,FrameLayout等等之类的。本人还没尝试,值得一做。
3.关于使用<merge></merge>标签的一些限制:
(1)它只能作为XML布局声明的root元素来使用;
(2)使用它来inflate一个布局时,必须指定一个ViewGroup实例作为其父元素并且设置attachToRoot属性为true(参考 inflate(int, android.view.ViewGroup, boolean) 方法的说明 )。
http://hi.baidu.com/lck0502/blog/item/f22a1b13dccde8def6039ea4.html
发表评论
-
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 931随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1100http://beforweb.com/node/134 ... -
android 开源 OCR 项目 及手写识别[转]
2012-12-11 18:21 57221)一个为Android平台,将识别由手机的相机拍摄的图 ... -
Android通过共享用户ID来实现多Activity进程共享【转】
2012-12-10 14:33 1078http://mypyg.iteye.com/blog/720 ... -
Android应用程序组件Content Provider的启动过程源代码分析【转】
2012-12-05 18:31 1095通过前面的学习,我们知道在Android系统中,Cont ... -
理解android上的安全性【转】
2012-12-03 18:08 860开发 Android 应用程序时,必须处理很多与安全性相关的方 ... -
Android 安全机制概述 Permission【转】
2012-12-03 18:07 11271 Android 安全机制概述 Android 是一个权限分 ... -
Android学习笔记之一谁动了我的接口附checkPermission流程(Dean)[转]
2012-12-03 18:06 18064前段时间接到一个有趣的需求!我们实现的某某功能的手机对外提供了 ... -
(JAVA) 使用异或进行简单的密码加密(JAVA实现)[转]
2012-11-12 16:44 1189http://blog.sina.com.cn/s/bl ... -
SL4A 之实现原理解析【转】
2012-10-23 23:52 1251关于SL4A的简介和在Android系统的安装及使用,请参 ... -
百度地图API之根据经纬度查询地址信息(Android)[转]
2012-06-16 00:15 19746http://blog.csdn.net/lyq8479/ar ... -
百度地图的手动定位和自动定位[转]
2012-06-15 23:24 3406http://aokunsang.iteye.com/b ... -
如何编程实现开启或关闭GPS?
2012-06-09 22:14 1095来自 手机应用中最酷的可能就是位置服务相关的了, ... -
Android软键盘的隐藏显示研究[转]
2012-05-25 16:30 1397Android是一个针对触摸屏专门设计的操作系统,当点 ... -
15 个变量和方法命名的最佳实践[转]
2012-02-27 11:44 99415 个变量和方法命名的最佳实践 在每个代码范围内使用足够短 ... -
iPhone Android Web开发(概要)
2012-01-19 15:15 1035一、 前端使用技术 JavaScript、 jQuer ... -
移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet设置[转]
2011-11-23 14:35 2723APN(Access Point Name),即“接入 ... -
Android Http CMWAP联网获取实例【转】
2011-10-24 13:24 1374上午的时候原本想通过改变切入点的方式来实现cmwap,但是我们 ... -
监听ListView滚动到最底部【转】
2011-09-13 10:27 5832监听ListView的滚动可以用两个东西: ListV ... -
Android蓝牙开发浅谈【转】
2011-09-07 14:20 1512转自:http://www.eoeandroid.co ...
相关推荐
android include merge标签
Android中include和merge标签的基本使用方法
android中include和merge标记的区别和使用
主要介绍了Android中使用include标签和merge标签重复使用布局,文中讲解了创建可复用布局的例子以及include标签和merge标签使用例子,需要的朋友可以参考下
Android 官方提供了三个用来优化布局的标签,分别是include、merge与ViewStub,下面这篇文章主要给大家介绍了关于Android布局技巧之include、merge与ViewStub标签巧用的相关资料,需要的朋友可以参考下
由于Android系统对硬件的要求较高,并且上层应用都是用Java(效率要比C++低)编写的,对程序的优化就成了...可以从以下几个地方下手:布局优化、数据库优化、使用异步加载数据、使用缓存技术、算法代码优化、使用线程池
在布局优化中,Androi的官方提到了这三种布局<include>、<merge>、,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记。 1、布局重用<include> <include>标签能够...
我们已经有文章向你描述如何使用<include>标签来重用和共享你的布局代码。这篇文章将向你阐述<merge>标签的使用以及如何与<include>标签互补使用。 <merge>标签用于减少View树的层次来优化Android的布局。通过看一个...
Android——Android lint工具项目资源清理 最近维护的项目已经有两年多,经过很多前辈的迭代,项目并没有变得健壮...尽量使用include、merge、ViewStub标签,尽量不存在冗余嵌套及过于复杂布局,尽量使用GONE替换INVISIBL
Activity和Fragment的生命周期 加速Activity启动 精简onCreate中的代码 将耗时操作放到后台线程 优化布局文件( Hierarchy Viewer, Layoutopt) 缓存ListView Android多线程的几种方式 Handler.sendXXXMessage() ...
开发一款性能优良的应用是每一个Android开发者都必须经历的挑战。在移动端资源有限的前提下,提高应用的性能显得尤为重要。常见的提高APP性能的优化...(2)使用include标签来重用布局,使用merge标签来合并布局。 (3
系统对 merge、include 是如何处理的 merge 标签为什么可以起到优化布局的效果? XML 中的 View 是如何被实例化的? 为什么复杂布局会产生卡顿?在 Android 10 上做了那些优化? BlinkLayout 是什么?
比较好的一种做法是使用include标签,复用同一个xml文件来实现布局的复用。但是这种方法是通过代码的方式来设置标题,左右按钮等其他的属性,会导致布局属性和Activity代码耦合性比较高。 因此,我们要通过自定义...