【Android】merge,include和viewstub的区别

这篇具有很好参考价值的文章主要介绍了【Android】merge,include和viewstub的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

序言

在Android开发中,mergeincludeViewStub都是用于布局的标签。

merge标签:

merge标签用于优化布局层级,可以减少不必要的视图层次,提高布局的性能。

它会将标记的子视图合并到其父视图中,而不会创建新的视图层次结构。这意味着merge标签本身不会生成视图,仅用于组织布局结构。

merge通常与其他布局标签(如LinearLayout、RelativeLayout等)一起使用,以组成复杂的布局。

示例

<!-- parent_layout.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <merge>
        <!-- 子视图 -->
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, world!" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Click me" />
    </merge>

</LinearLayout>

parent_layout.xml使用了merge标签将TextView和Button合并到LinearLayout中,而无需创建额外的视图层次结构。

include标签:

include标签用于在布局中重用其他布局文件。

通过include标签,可以将其他布局文件中定义的视图结构嵌入到当前布局中,实现布局的模块化和复用。

include标签需要指定要包含的布局文件的名称,并可以通过属性进行配置。

示例

<!-- parent_layout.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <include layout="@layout/child_layout" />

</LinearLayout>

<!-- child_layout.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, world!" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click me" />

</LinearLayout>

parent_layout.xml使用include标签引用了名为child_layout.xml的布局文件,从而实现了布局的重用和模块化。

ViewStub类:

ViewStub类允许您在布局中延迟加载或懒加载视图,以优化布局的性能和内存占用。

在初始加载时,ViewStub只会占用非常小的内存空间,只有在需要显示时才会被实例化。

ViewStub通常用作一个占位符,占据布局中的位置,但最初不会显示任何内容。当需要加载显示视图时,可以通过ViewStub的inflate()方法将其实例化为真正的视图,并替代占位符。

示例

<!-- parent_layout.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <Button
        android:id="@+id/show_view_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show View" />

    <ViewStub
        android:id="@+id/view_stub"
        android:inflatedId="@+id/inflated_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout="@layout/inflatable_view" />

</LinearLayout>

<!-- inflatable_view.xml -->
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/inflated_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="This is the inflated view" />

parent_layout.xml包含了一个ViewStub标签,该标签引用了一个名为inflatable_view.xml的布局文件。初始加载时,ViewStub只会占用很小的内存空间。当点击"Show View"按钮后,可以通过以下代码将ViewStub实例化为真正的视图:

Button showViewButton = findViewById(R.id.show_view_button);
ViewStub viewStub = findViewById(R.id.view_stub);

showViewButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        View inflatedView = viewStub.inflate(); // 实例化ViewStub为真正的视图
        // 进行对视图的操作
        TextView textView = inflatedView.findViewById(R.id.inflated_view);
        textView.setText("This is the inflated view");
    }
});

通过点击按钮触发的事件,可以将ViewStub动态地实例化为真正的视图,并在其中进行相应的操作。文章来源地址https://www.toymoban.com/news/detail-605904.html

到了这里,关于【Android】merge,include和viewstub的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android学习笔记

    Android是一种廉价而又灵活的智能手机操作系统,它的普及使得人们可以拥有一款更加便捷的智能手机。Android系统的普及,提升了智能手机的使用价值,让人们的生活更加便捷。那么,如何学习Android呢?下面是一篇关于学习Android的文章,希望对初学者有所帮助。 一、了解A

    2024年02月02日
    浏览(36)
  • 《Android学习笔记》Android12蓝牙扫描不到设备的权限问题

    Android12 关于蓝牙这部分新增了 BLUETOOTH_SCAN 、 BLUETOOTH_ADVERTISE 和 BLUETOOTH_CONNECT 权限,这些权限都属于敏感权限,都需要在代码中动态申请。移除了Android11 及以下版本中必须申请的位置权限[ FINE_LOCATION ] 和 [ COARES_LOCATION ]。 1、在Manifest.xml清单文件中添加对应的权限。 其中 An

    2024年02月15日
    浏览(51)
  • Android学习笔记 - 常用的布局

    Android中有六种的布局方式,分别是:LinearLayout(线性布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局)、AbsoluteLayout(绝对布局)、GridLayout(网格布局)。在开发中,我们用的最多的就是线性布局和相对布局。 线性布局是我们在开发中用的最多的一种布局方式。

    2024年02月04日
    浏览(43)
  • 【Android】setContentView的学习笔记

    performLaunchActivity() ActivityThread.performLaunchActivity() 方法是 Android 系统中负责启动一个 Activity 的关键方法。 当调用 startActivity() 方法启动一个 Activity 时, ActivityThread 对象会接收到该请求,并调用 performLaunchActivity() 方法。 在 performLaunchActivity() 方法内部,首先会创建一个新的

    2024年02月15日
    浏览(36)
  • Android学习笔记 - Camera(1)

    在APP开发中会有很多业务使用到Camera,对于一些基础的功能,调用系统的拍摄功能就可以满足要求。但是需要自定义UI界面时,例如将摄像头捕获的视图展示在页面上的时候就需要使用到Camera这个类了。 本篇会介绍哪些知识点: 什么是SurfaceView?有什么作用?何为双缓冲机制

    2024年02月03日
    浏览(40)
  • 【Android】APP启动优化学习笔记

    用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动速度,让用户获得更好的使用体验。 竞争优势

    2024年02月14日
    浏览(41)
  • 【Android学习笔记】事件监听机制详解

    两种事件处理机制 基于监听的事件处理 基于回调的事件处理 涉及到的三类对象 Event Source事件源,指各个组件。 Event 界面组件上发生的特定的事情,。 Event Listener监听事件源发生的事情。并对各种事情作出相应的响应。 Event Handler事件处理器,当事件监听器捕获事件后,由响

    2024年02月11日
    浏览(58)
  • Android ContentProvider基础知识学习笔记

    1、动态申请权限 2、读取手机联系人 3、创建自己的ContentProvider (1) onCreate()。初始化ContentProvider的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回true表示ContentProvider初始化成功,返回false则表示失败。 (2) query()。从ContentProvider中查询数据。uri参数用于确定查

    2024年04月10日
    浏览(45)
  • Android学习笔记 - 广播的注册与接收

    目录 一、简介 二、广播接收器的注册 广播是Android四大组件之一,是以intent为媒介在组件间进行传播数据的一种机制。 从整体来看,广播主要有三个动作和三个角色。三个动作包含“注册广播接收器”、“发送广播”和“接收广播”;三个动作包含发送方、接收方和中间人

    2023年04月23日
    浏览(89)
  • 【Android】底层逻辑深入了解(学习笔记)(未完)

    step by step. 目录 init启动 Zygote进程:  SystemServer处理过程 Binder: Launcher启动过程 Android系统启动流程 四大组件 Activity Service  BroadcastReceiver广播 ContentProvider内容提供者(进程内和进程间的数据共享)  Context上下文  AMS(ActivityManagerService) (在图书馆看了《Android进阶解密》,

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包