【约束布局】ConstraintLayout配合Guideline解决两个子控件其中一个被挤出屏幕的问题

本文主要是介绍【约束布局】ConstraintLayout配合Guideline解决两个子控件其中一个被挤出屏幕的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求

        屏幕横向显示文本框A和图标B,A在B的左侧,B紧贴在A的右边显示,文本框A的字数不确定,文本框A的字数足够多时,换行显示,并且保证图标B一直在文本框A的右侧,且不被挤出屏幕。

二、问题

        本来以为是一个很简单的需求,直接用LinearLayout布局,horizontal横向,因为文本框的长度不确定,所以设置weight权重比例是不合适的。自适应横向排列的话,文本框字数太多就会把后面的图标挤出父布局看不到。还有一个想法,就是TextView设置drawableEnd属性,这种方法是可行的,不过也有弊端,那就是无法控制图标的大小,在不同分辨率的设备上,图标的大小会显示的很不适配。

三、解决问题

上面的问题解决的话,方法是比较多,不过需要嵌套布局或者多写一些代码,我觉得最合适的方案,还是使用约束布局ConstraintLayout及其相关的布局和属性来解决。涉及到的布局、属性如下:

  1. app:layout_constrainedWidth="true",让控件的宽度受到约束
  2. Guideline,利用参考线,让后面的ImageView保持在参考线左侧
  3. app:layout_constraintHorizontal_chainStyle,设置为packed,让图标紧贴着文本框
  4. app:layout_constraintHorizontal_bias,横向偏移设置为0,让整体从父布局左边开始

四、代码

  <androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="@dimen/dp_120"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv_labelAndName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:lineSpacingMultiplier="0.8"android:maxLines="2"android:textColor="@color/color_111111"android:textSize="@dimen/sp_14"app:layout_constrainedWidth="true"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@id/img_sex"app:layout_constraintHorizontal_bias="0"app:layout_constraintHorizontal_chainStyle="packed"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="0000000002床 特靠谱" /><ImageViewandroid:id="@+id/img_sex"android:layout_width="@dimen/dp_12"android:layout_height="@dimen/dp_12"android:src="@mipmap/ic_sex_male"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@id/guideline"app:layout_constraintStart_toEndOf="@id/tv_labelAndName"app:layout_constraintTop_toTopOf="parent" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="1" /></androidx.constraintlayout.widget.ConstraintLayout>

关键代码:

1,TextView

           //让TextView的宽度受到整体的约束,会给ImageView留位置,不把后者挤出去

            app:layout_constrainedWidth="true"

            //让TextView保持在ImageView的左边
            app:layout_constraintEnd_toStartOf="@id/img_sex"

            //TextView开头的链,横向偏移量为0,也就是从父控件的最左端开始
            app:layout_constraintHorizontal_bias="0"

            //将TextView、ImageView设为链,并且是紧贴在一起的
            app:layout_constraintHorizontal_chainStyle="packed"

2,ImageView

            //让ImageView保持在参考线Guideline左侧,这样才能保证不被挤出父布局外面
            app:layout_constraintEnd_toStartOf="@id/guideline"

            //让ImageView保持在TextView右侧
            app:layout_constraintStart_toEndOf="@id/tv_labelAndName"

3,Guideline

            //定义参考线的方向,是垂直方向的参考线

            android:orientation="vertical"

            //定义参考线相对父控件的位置,距离父控件起始位置的百分比。因为我们定义了垂直参考线,那么就是距离父控件左端的百分比。0.0表示在父控件最左端无偏移,1表示在父控件的最右端,完全偏移。
            app:layout_constraintGuide_percent="1" 

调试效果:

这篇关于【约束布局】ConstraintLayout配合Guideline解决两个子控件其中一个被挤出屏幕的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解