ConstraintLayout中子布局wrap_content超出屏幕处理方案

本文主要是介绍ConstraintLayout中子布局wrap_content超出屏幕处理方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • ConstraintLayout中子布局wrap_content超出屏幕处理方案
        • 1、问题描述
        • 2、布局效果展示
        • 3、问题代码
        • 4、解决方案
        • 5、附录


ConstraintLayout中子布局wrap_content超出屏幕处理方案

1、问题描述

在ConstraintLayout中使用链式约束布局,且子控件宽度设置为wrap_content,无其他强制宽度约束,布局效果默认各子控件最大宽度/高度=ConstraintLayout宽/高,导致子控件可能超出ConstraintLayout布局范围
注:引入版本–‘androidx.constraintlayout:constraintlayout:1.1.3’

2、布局效果展示

未处理效果
处理后效果

3、问题代码
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"><ImageViewandroid:id="@+id/img_icon"...app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"...app:layout_constraintBottom_toTopOf="@id/tv_subTitle"app:layout_constraintRight_toRightOf="@id/msg_red_dot"app:layout_constraintLeft_toRightOf="@id/img_icon"app:layout_constraintTop_toTopOf="parent" /><com.flyco.tablayout.widget.MsgViewandroid:id="@+id/msg_red_dot"android:layout_width="5dp"android:layout_height="5dp"...app:layout_constraintLeft_toRightOf="@id/tv_title"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="@id/tv_title" /><TextViewandroid:id="@+id/tv_subTitle"android:layout_width="wrap_content"android:layout_height="wrap_content"...app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toRightOf="@id/img_icon"app:layout_constraintTop_toBottomOf="@id/tv_title" /></androidx.constraintlayout.widget.ConstraintLayout>
4、解决方案

2、添加如下约束宽度

app:layout_constrainedWidth="true"//约束宽度

3、同理高度约束:

  app:layout_constrainedHeight="true"

4、修改后代码

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"><ImageViewandroid:id="@+id/img_icon"...app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"...app:layout_constraintHorizontal_chainStyle="packed"  <!-- 见附录1 -->app:layout_constraintBottom_toTopOf="@id/tv_subTitle"app:layout_constraintRight_toLeftOf="@id/msg_red_dot"app:layout_constraintHorizontal_bias="0" <!-- 见附录2 -->app:layout_constrainedWidth="true"app:layout_constraintLeft_toRightOf="@id/img_icon"app:layout_constraintTop_toTopOf="parent" /><com.flyco.tablayout.widget.MsgViewandroid:id="@+id/msg_red_dot"...app:layout_constraintLeft_toRightOf="@id/tv_title"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="@id/tv_title"/><TextViewandroid:id="@+id/tv_subTitle"android:layout_width="wrap_content"android:layout_height="wrap_content"...app:layout_constrainedWidth="true"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toRightOf="@id/img_icon"app:layout_constraintTop_toBottomOf="@id/tv_title" /></androidx.constraintlayout.widget.ConstraintLayout>
5、附录

1、链式样式设置参数(layout_constraintHorizontal_chainStyle/layout_constraintVertical_chainStyle)

作用于链头第一个子控件
参数说明:

  • spread - 默认样式,散布、默认等分间距(可加权修改间距,可加偏移修改链头/尾间距比例)
  • spread_inside - 类似spread ,但链的两端将不会散布(贴合父布局边界)
  • packed - 整合,链中子元素间不会散布(无间距,非margin和padding),与spread_inside 效果相反(可加偏移修改链头/尾间距比例)

2、偏移设置(layout_constraintHorizontal_bias/layout_constraintVertical_bias)

作用于链头第一个子控件,通过设置值0~1控制头尾间距比例(偏移比例)

这篇关于ConstraintLayout中子布局wrap_content超出屏幕处理方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906518

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本