首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android抽象布局——include、merge 、ViewStub

在布局优化中,Androi的官方提到了这三种布局include />、、,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记...1、布局重用include /> include />标签能够重用布局文件,简单的使用如下: android="http://schemas.android.com...4)布局中可以包含两个相同的include标签,引用时可以使用如下方法解决(参考): View bookmarks_container_2 = findViewById(R.id.bookmarks_favourite...例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。...android:text="@string/delete"/> 现在,当你添加该布局文件时(使用include />标签),系统忽略节点并且直接添加两个

72220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android布局优化:include 、merge、ViewStub的详细总结

    一、include的用法以及注意点 在开发Android布局时,我们常将一些通用的视图提取到一个单独的layout文件中,然后使用include>标签在需要使用的其他layout布局文件中加载进来,比如我们自己...布局文件有多个include标签需要设置ID,才能找到相应子View的控件,否则只能找到第一个include的layout布局,以及该布局的控件。...3,如果我们给include所加载的layout布局的根容器设置了id属性,也在include标签中设置了id属性,同时需要在代码中获取根容器的控件对象时,最好将这两个id设置相同的名称!...include标签存在着一个不好的地方,可能会导致产生多余的布局嵌套。同样通过一个小demo来说明: 比如项目中有一个公共的登录按钮布局,如下: login.xml: 的用法以及注意点 ViewStub也可以用来加载布局文件,但与include标签完全不同。

    2.2K50

    Android-布局优化merge, viewStub, include总结

    多层布局的嵌套会导致页面加载慢,影响用户的体验,今天我们就来学学如何使用 include,merge及viewStub。...1.include include便于对相同视图内容进行统一的控制管理,提高布局重用性,以标题栏为例,我们先定义一个通用的标题栏,相关代码如下: commont_title include设置了id,就会覆盖掉引用布局根布局的id,所以解决办法用两种: 第一种直接获取include的id,进行findviewByid() 第二种将两者的id取名一致 我们选取第一种...image.png 2.merge merge标签是作为include标签的一种辅助扩展来使用的,也就是需要和include一起使用,它的主要作用是为了防止在引用布局文件时产生多余的布局嵌套。...image.png 欧克,我们看看我们将include中的布局改为merge,注意:merge必须放在布局文件的根节点上。

    1.1K10

    Android布局优化之ViewStub、include、merge使用与源码分析

    一、include 首先用得最多的应该是include,按照官方的意思,include就是为了解决重复定义相同布局的问题。...注意事项 使用include最常见的问题就是findViewById查找不到目标控件,这个问题出现的前提是在include时设置了id,而在findViewById时却用了被include进来的布局的根元素...元素,然后再解析被include进来的布局的root view元素。...我们注意看注释5处,这里就解释了为什么include标签和被引入的布局的根元素都设置了id的情况下,通过被引入的根元素的id来查找子控件会找不到的情况。...所以结论就是: 如果include中设置了id,那么就通过include的id来查找被include布局根元素的View;如果include中没有设置Id, 而被include的布局的根元素设置了id,

    1.1K20

    Android布局优化三剑客:include+merge+ViewStub

    解决了1中的问题之后,发现复用的布局外面总要额外套上一层布局,要知道布局嵌套是会影响性能的呐; 有些布局只有用到时才会显示,但是必须提前写好,虽然设置了为invisible或gone,还是多多少少会占用内存的...include布局"); 运行之后可以可以看到如下布局: ?...因为把需要重用的布局放到一个子布局之后就必须加一个根布局,如果你的主布局的根布局和你需要include的根布局都是一样的(比如都是LinearLayout),那么就相当于在中间多加了一层多余的布局了。...运行之后你会发现新加的TextView会把merge布局盖住,没有像预期那样在其下方。...这样的设计其实也符合ViewStub的特性,即填充布局之后就自我销毁了,给其设置可见性是没有意义的。

    3.5K52

    2014-10-25Android学习------布局处理(四)------ListView的item点击之后的布局

    我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个HealthFood 源码 百度搜就知道很多下载的地方 本节学习接上篇布局学习(二)...地址:http://blog.csdn.net/u014737138/article/details/40480291 当我们把ListView布局好之后,我们就可以看到很多行,但是对行的点击操作,应该设置它跳转到另外一个...那么我先看看效果图: 这一节我们需要学习的关于布局的知识点有以下这些: 1.子线性布局里面的返回按钮: <LinearLayout xmlns:android="...相对布局:放置一个图片,图片的右边是一个 相对布局有个特点,就是有且仅有一行,就是在视图上只显示一行,不会多显示 <RelativeLayout xmlns:android="...控件,整个布局文件中有且仅有一个ListView构件,它的id是系统自定义的, <ListView android:id="@id/android:list"

    51820

    Android中include标签的使用

    在Android的开发中,我们知道布局文件可以让我们很方便的对各个UI控件进行位置安排跟属性设置,而在程序中可以直接取得控件并赋予对应操作功能。...为此,Android为我们提供了一个武功高强的高手,这个高手的特异功能就是能够将几个不同的布局文件整合在一起,它的名字叫include,听名字就知道是包含的意思,当然是包括多个布局。...由于是讲布局的安排跟组合,那我们这里就只拿布局文件来解析下,其他程序代码跟其他程序没区别。 这里我们以最简单的控件TextView来举例,总共假设3个布局文件,其中一个布局包含了其他两个子布局。...include android:id="@+id/cell1" layout="@layout/includeA" /> 7 include android:id="@+id/cell2"...通过以上layoutP中的整合,layoutA与layoutB就成为layoutP中的子元素,不仅使得整个布局代码结构清晰,提高了可读性,而且可以将界面排版中的功能模块清楚的划分

    1.2K60

    JetPack指路明灯—Navigation

    创建Activity并引入NavHostFragment 在Activity的xml布局中,通过FragmentContainerView来创建这些Fragment的容器,代码如下所示。 ?...navigateUp navigateUp与物理返回键的功能类似,即返回当前页面堆栈的栈顶页面,代码如下所示。...所以在这种场景下,就需要在A—B—C之后,在C—A的路由中,配置popUpTo="@id/A",同时设置popUpToInclusive=true,将旧的A界面也移除,这样,C—A路由之后,页面栈中就只剩下...navigation.startDestination = R.id.loginFragment navHostFragment.navController.graph = navigation 实际上和动态Inflate布局再添加布局到容器的场景非常类似...,Navigation动态加载也是将navGraph从xml中创建好之后设置给navigation,接收参数的话,与正常的参数传递是一样的。

    1K20

    【Android进阶必学】JetPack指路明灯—Navigation

    创建Activity并引入NavHostFragment 在Activity的xml布局中,通过FragmentContainerView来创建这些Fragment的容器,代码如下所示。...navigateUp navigateUp与物理返回键的功能类似,即返回当前页面堆栈的栈顶页面,代码如下所示。...所以在这种场景下,就需要在A—B—C之后,在C—A的路由中,配置popUpTo="@id/A",同时设置popUpToInclusive=true,将旧的A界面也移除,这样,C—A路由之后,页面栈中就只剩下...navigation.startDestination = R.id.loginFragment navHostFragment.navController.graph = navigation 实际上和动态Inflate布局再添加布局到容器的场景非常类似...,Navigation动态加载也是将navGraph从xml中创建好之后设置给navigation,接收参数的话,与正常的参数传递是一样的。

    2.1K00

    Android性能优化:这是一份详细的布局优化指南(含标签Include、Viewstub、Merge讲解)

    当其他布局通过include>标签引用布局A时,布局A中的标签内容(根节点)会被去掉,在include>里存放的是布局A中的标签内容(根节点)的子标签(即子节点),以此减少布局文件的层次...C根标签 的RelativeLayout 改为 * 在引用布局C时,布局C中的标签内容(根节点)会被去掉,在include>里存放的是布局C中的标签内容(...使用 布局标签 include>,其作用是实现 布局模块化,即 提取布局中的公共部分 供其他布局共用。...// include>标签所需属性 = 公共部分的layout属性,作用 = 指定需引入、包含的布局文件 include layout="@layout/layout_c.xml" />...(); 需要特别注意的是: ViewStub中的layout布局不能使用merge标签,否则会报错 ViewStub的inflate只能执行一次,显示了之后,就不能再使用ViewStub控制它了 与View.setVisible

    1.9K21

    【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )

    , 还没有进行第一次编译 , 选择 " 菜单栏 / Build / Make Project " 选项 , 编译一次应用 ; 编译成功之后 , 就可以使用 NavigationGraph 的 Design...是哪一个 ; 3、Activity 导入 NavHostFragment 进入 Launcher 界面 MainActivity 的布局中 , 删除布局中的其它元素 ; 将 NavHostFragment...> 5、Activity 界面开发 NavigationUI 的主要逻辑 ( 重点 ) a、添加 Fragment 布局 在 Activity 的布局文件中 , 添加如下代码 , 不建议在 Design..., 如果想要返回, 需要重写 onSupportNavigateUp 方法 ; NavigationUI.navigateUp(navController, appBarConfiguration) 的作用就是将...界面的 Kotlin 源码和布局文件 在该界面中 , 设置了 隐藏 AppBar 中的 菜单按钮 的功能 , 跳转到 FragmentB 之后 , 右上角 就不再显示菜单按钮 ; FragmentB 代码

    95540

    写给 Android 开发的小程序布局指南,Flex 布局!

    如果有前端经验的话,小程序是非常容易上手的,而对于新手,第一步当然是阅读小程序的官方文档,不过之后你马上就要面临布局的问题。...二、什么是 Flex Flex 是 2009 年,W3C 提出的一种新的布局适配方案,通过 Flex 布局,可以简便、完整、响应式的实现各种页面布局。...2)flex-wrap flex-wrap 属性用来确定,父容器内,当单行已经无法包容所有子元素之后,如何换行。 nowrap:不换行,此为默认值。 wrap:超出单行的时候,自然换行。...当设定了 flex-grow 之后,其内的子元素不注意占满整个父容器,就会按照 flex-grow 设定的比例,分配子元素的空间,flex-grow 的数值越小,占据的空间越小。...以这里的表现来看,flex-grow 从小到大占据父容器的空间。 而 B 例子,我们将子元素的宽度 width 属性,设置为 500rpx 之后,明显一行已经不够放下 3 个子元素了。

    1K30

    Android 中的LayoutInflater(布局服务)

    本节引言: 本节继续带来的是Android系统服务中的LayoutInflater(布局服务),说到布局,大家第一时间 可能想起的是写完一个布局的xml,然后调用Activity的setContentView...()加载布局,然后把他显示 到屏幕上是吧~其实这个底层走的还是这个LayoutInflater,用的Android内置的Pull解析器来解析 布局。...先演示下设置大小的方法:(前面的LinearLayout可以根据不同容器进行更改) LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams...先写下主布局文件和动态加载的布局文件: activity_main.xml: android="http://schemas.android.com/apk/..." android:text="我是布局里的一个小按钮" /> 接着到我们的MainActivity.java在这里动态加载xml布局:

    83410
    领券