首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使ConstraintLayout在安卓系统中可滚动?

如何使ConstraintLayout在安卓系统中可滚动?
EN

Stack Overflow用户
提问于 2017-09-10 17:52:21
回答 1查看 3.1K关注 0票数 0

我试图动态地向ConstraintLayout添加元素,使其可以滚动。我把ConstraintLayout包在ScrollView里。在插入元素之前,它看起来不错。但是,插入后,滚动视图不会展开,因此不会显示底部的某些元素。

https://i.imgur.com/PtND5uo.png按钮删除

代码语言:javascript
运行
AI代码解释
复制
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    tools:context="com.example.abel.standingcalculator.MainActivity">
<android.support.constraint.ConstraintLayout
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="0dp">

    <Button
        android:id="@+id/calculate"
        android:layout_width="122dp"
        android:layout_height="48dp"
        android:layout_marginBottom="0dp"
        android:layout_weight="1"
        android:text="Calculate"
        app:layout_constraintBottom_toBottomOf="@+id/save"
        app:layout_constraintLeft_toRightOf="@+id/save"
        app:layout_constraintRight_toRightOf="parent" />

    <Button
        android:id="@+id/save"
        android:layout_width="125dp"
        android:layout_height="49dp"
        android:layout_marginBottom="0dp"
        android:layout_marginTop="40dp"
        android:layout_weight="1"
        android:text="Save"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/calculate"
        app:layout_constraintTop_toBottomOf="@+id/new_item"
        app:layout_constraintVertical_bias="0.325" />

    <EditText
        android:id="@+id/proportion1"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:layout_marginBottom="0dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:ems="10"
        android:inputType="numberDecimal"
        android:textSize="14sp"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="@+id/proportion_label1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="@+id/item_name1"
        app:layout_constraintRight_toRightOf="parent" />

    <EditText
        android:id="@+id/sd1"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:ems="10"
        android:inputType="numberDecimal"
        android:textSize="14sp"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="@+id/sd_label1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="@+id/proportion1"
        app:layout_constraintRight_toRightOf="parent" />

    <EditText
        android:id="@+id/mean1"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:ems="10"
        android:inputType="numberDecimal"
        android:textAlignment="center"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="@+id/mean_label1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="@+id/sd1"
        app:layout_constraintRight_toRightOf="parent" />

    <EditText
        android:id="@+id/total_grade1"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:layout_marginBottom="1dp"
        android:ems="10"
        android:inputType="numberDecimal"
        android:textAlignment="center"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        android:textColor="@android:color/black"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="@+id/total_grade_label1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="@+id/mean1"
        app:layout_constraintRight_toRightOf="parent" />

    <TextView
        android:id="@+id/item_name_label1"
        android:layout_width="41dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="30dp"
        android:text="Item Name"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/proportion_label1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="20dp"
        android:text="Proportion"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/item_name_label1" />

    <TextView
        android:id="@+id/sd_label1"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="20dp"
        android:text="Standard Deviation"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/proportion_label1" />

    <TextView
        android:id="@+id/mean_label1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="20dp"
        android:text="Mean"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/sd_label1" />

    <TextView
        android:id="@+id/total_grade_label1"
        android:layout_width="46dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="20dp"
        android:text="Total Grade"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/mean_label1" />

    <TextView
        android:id="@+id/your_grade_label1"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="20dp"
        android:text="Your grade"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/total_grade_label1" />

    <EditText
        android:id="@+id/item_name1"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="32dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="32dp"
        android:ems="10"
        android:inputType="text"
        android:textAlignment="center"
        android:textSize="14sp"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="@+id/item_name_label1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toRightOf="@+id/item_name_label1"
        app:layout_constraintRight_toRightOf="parent" />

    <Button
        android:id="@+id/new_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="38dp"
        android:text="Add New Item"
        app:layout_constraintHorizontal_bias="0.97"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/your_grade_label1" />

    <EditText
        android:id="@+id/your_grade1"
        android:layout_width="323dp"
        android:layout_height="36dp"
        android:ems="10"
        android:inputType="numberDecimal"
        android:textAlignment="center"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        android:textColor="@android:color/black"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="@+id/your_grade_label1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="@+id/total_grade1"
        app:layout_constraintRight_toRightOf="parent" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="16dp"
        tools:layout_editor_absoluteX="16dp"
        tools:layout_editor_absoluteY="81dp" />
    <android.support.constraint.ConstraintLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.constraint.ConstraintLayout>
</ScrollView>

编辑:这是动态添加的部分。

代码语言:javascript
运行
AI代码解释
复制
    mConstraintSet.clone(mConstraintLayout); // get constraints from ConstraintSet        }
    //item name label
    mConstraintSet.constrainHeight(item_name_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.constrainWidth(item_name_label.getId(),
            toDp(41));
    int your_grade_id = (itemCount == 2) ? R.id.your_grade1 : ids.get("your_grade"+(itemCount-1));
    mConstraintSet.connect(item_name_label.getId(), ConstraintSet.TOP, your_grade_id,
            ConstraintSet.BOTTOM,toDp(40));
    mConstraintSet.connect(item_name_label.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID,
            ConstraintSet.START,toDp(20));
    //for item name
    mConstraintSet.constrainHeight(item_name.getId(),
            toDp(36));
    mConstraintSet.constrainWidth(item_name.getId(),
            0);
    mConstraintSet.connect(item_name.getId(), ConstraintSet.BOTTOM, item_name_label.getId(),
            ConstraintSet.BOTTOM,0);
    mConstraintSet.connect(item_name.getId(), ConstraintSet.START, item_name_label.getId(),
            ConstraintSet.END, toDp(32));
    mConstraintSet.connect(item_name.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID,
            ConstraintSet.END,0);
    //proportion
    mConstraintSet.constrainHeight(proportion_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.constrainWidth(proportion_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.connect(proportion_label.getId(), ConstraintSet.TOP, item_name_label.getId(),
            ConstraintSet.BOTTOM,toDp(20));
    mConstraintSet.connect(proportion_label.getId(), ConstraintSet.START, item_name_label.getId(),
            ConstraintSet.START,0);
    connect(mConstraintSet, proportion, item_name, proportion_label);
    //sd
    mConstraintSet.constrainHeight(sd_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.constrainWidth(sd_label.getId(),
            toDp(60));
    mConstraintSet.connect(sd_label.getId(), ConstraintSet.TOP, proportion_label.getId(),
            ConstraintSet.BOTTOM,toDp(20));
    mConstraintSet.connect(sd_label.getId(), ConstraintSet.START, proportion_label.getId(),
            ConstraintSet.START,0);
    connect(mConstraintSet, sd, proportion, sd_label);
    //mean
    mConstraintSet.constrainHeight(mean_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.constrainWidth(mean_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.connect(mean_label.getId(), ConstraintSet.TOP, sd_label.getId(),
            ConstraintSet.BOTTOM,toDp(20));
    mConstraintSet.connect(mean_label.getId(), ConstraintSet.START, sd_label.getId(),
            ConstraintSet.START,0);
    connect(mConstraintSet, mean, sd, mean_label);
    //total grade
    mConstraintSet.constrainHeight(total_grade_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.constrainWidth(total_grade_label.getId(),
            toDp(46));
    mConstraintSet.connect(total_grade_label.getId(), ConstraintSet.TOP, mean_label.getId(),
            ConstraintSet.BOTTOM,toDp(20));
    mConstraintSet.connect(total_grade_label.getId(), ConstraintSet.START, mean_label.getId(),
            ConstraintSet.START,0);
    connect(mConstraintSet, total_grade, mean, total_grade_label);
    //your grade
    mConstraintSet.constrainHeight(your_grade_label.getId(),
            ConstraintSet.WRAP_CONTENT);
    mConstraintSet.constrainWidth(your_grade_label.getId(),
            toDp(40));
    mConstraintSet.connect(your_grade_label.getId(), ConstraintSet.TOP, total_grade_label.getId(),
            ConstraintSet.BOTTOM,toDp(20));
    mConstraintSet.connect(your_grade_label.getId(), ConstraintSet.START, total_grade_label.getId(),
            ConstraintSet.START,0);
    connect(mConstraintSet, your_grade, total_grade, your_grade_label);
    //relocate buttons
    mConstraintSet.connect(R.id.new_item, ConstraintSet.TOP, your_grade_label.getId(),
            ConstraintSet.BOTTOM,toDp(40));
    mConstraintSet.connect(R.id.save, ConstraintSet.TOP, R.id.new_item,
            ConstraintSet.BOTTOM,toDp(40));
    mConstraintSet.connect(R.id.save, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID,
            ConstraintSet.BOTTOM,toDp(0));

    mConstraintSet.applyTo(mConstraintLayout);

希望这能提高代码的可读性。https://i.imgur.com/lYIXlVi.png

EN

回答 1

Stack Overflow用户

发布于 2017-09-10 18:16:37

尝试像下面的代码一样设置height=0dp ..。

代码语言:javascript
运行
AI代码解释
复制
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
 android:layout_width="0dp"
 android:layout_height="0dp"
 app:layout_constraintLeft_toLeftOf="parent"
 app:layout_constraintRight_toRightOf="parent"
 app:layout_constraintTop_toTopOf="parent"
 android:layout_marginBottom="0dp"
 app:layout_constraintBottom_toTopOf="@+id/btnDone">

 <android.support.constraint.ConstraintLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">



    <TextView
        android:id="@+id/tvTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="TESTTT" />
 </android.support.constraint.ConstraintLayout>
</ScrollView>
</android.support.constraint.ConstraintLayout>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46147198

复制
相关文章
IDEA一个项目启动多个实例,以集群启动
在微服务开发场景下,服务大多是以集群方式部署的。在本地开发时 有时候会需要以集群的方式启动项目,同时启动多个实例来测试一些相关功能(例如分布式锁),此时不需要打包之后再仍到测试环境去启动多个实例,在IDE中就可以同时启动多个实例。
鱼找水需要时间
2023/02/16
2K0
IDEA一个项目启动多个实例,以集群启动
docker容器启动多个终端,docker启动多个终端
如果我们通过docker attach cd3b79a85d7e命令来开启两个终端启动,我们发现输入命令另一个终端也在同步输入很尴尬。
高久峰
2023/06/27
6440
实现一个启动多个jar或多个服务的脚本
在一开始,我选择了参考网上所说的定义一个rc.local文件,修改/etc/rc.local,但发现这种方法可以实现自启动脚本,但是通常只能启动一个服务,然后后面的服务就不能启动了。这个是因为自己做了实验发现的。
路行的亚洲
2021/08/20
4.5K0
多个Tomcat启动配置
修改Server 的端口8005 修改为任意的的端口,注意不能与别的Tomcat重复。
收心
2022/01/19
1.3K0
mysql启动多个实例
机器环境:CentOS Linux release 7.4.1708 (Core)
dogfei
2020/07/31
3.4K0
docker-compose一个应用启动多个节点
前言 我们知道以前使用docker的时候启动两个节点需要我们构建两个镜像,每个镜像都分别映射端口并启动镜像 非常的不方便,但我们用docker-compose就可以非常方便 的启动了 docker-compose.yml配置 version: "3" services: web: build: context: /home/chatAPI/ dockerfile: Dockerfile image: demo-web1:v1.0.0 restart
SuperChen
2023/02/13
2.1K0
SpringBoot同一个服务多个端口启动
设置完端口后点击下 空白处,否则有可能端口设置不上去 如果没有这个选项,则执行以下步骤即可看到:
星辰sea
2022/10/29
1.2K0
SpringBoot同一个服务多个端口启动
[C#] 控制台应用程序退出事件
在 .NET 中,是否有一种方法(例如事件)来检测控制台应用程序何时退出?你可能需要清理一些线程和 COM 对象.,记录一下信息等等。。。。。。。 比如我的数据采集软件,每次启动和退出时向钉钉推送相关
科控物联
2022/04/19
2.9K0
[C#] 控制台应用程序退出事件
Gin 框架:启动多个端口
请访问如下地址获取完整教程:https://rkdocs.netlify.app/cn
尹东勋
2021/12/01
1.6K0
Gin 框架:启动多个端口
idea启动多个tomcat失败
Intellij idea中,为在本地调试两个系统之间的调用,配置两个本地tomcat server,设置不同的端口号,如8081和8082,Deploy中加入两个系统各自的Artifact xxx:war, Application context设置为“/“,即访问地址分别为http://localhost:8081/ 和 http://localhost:8082/ 。 问题来了,分别单独启动两个server时都能成功;但是同时启动两个系统时,两个系统都会出现问题。其中较先启动的server报错为:St
欢醉
2018/01/22
2.6K0
adb shell 启动,停止 android 应用程序一、adb启动 应用程序二、adb停止 应用程序
包名和Activity类的类名一定要输入正确,可以用re-sign工具(在最后的弹出信息框会显示出包名和Activity类名)。
一个会写诗的程序员
2018/08/20
5.9K0
Linux启动多个Oracle实例
关键:操作每个数据库实例之前设置ORACLE_SID变量 export ORACLE_SID=数据库实例
小小工匠
2021/08/16
2.8K0
python启动应用程序和终止应用程序
每天上班,工作需要,电脑上需要每天开机启动一些软件,下班时候,需要关掉一些软件。一个一个打开和关闭貌似是很繁琐的,于是乎,这个脚本产生了。
py3study
2020/01/07
2.4K0
Echo 框架:启动多个端口
请访问如下地址获取完整教程:https://rkdocs.netlify.app/cn
尹东勋
2021/12/02
1.1K0
Echo 框架:启动多个端口
c语言中的system函数_c语言system的头文件
执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。
全栈程序员站长
2022/10/02
2.5K0
WinForm程序启动控制台窗口Console
本文转载:http://blog.csdn.net/oyi319/article/details/5753311
跟着阿笨一起玩NET
2018/09/19
2.5K0
WinForm程序启动控制台窗口Console
如何在 Windows 10上创建和运行批处理文件
在 Windows 10 上,批处理文件是一种特殊的文本文件,通常具有。Bat 扩展,它包含一个或多个命令,命令提示符可以理解并依次运行以执行各种操作。
披头
2020/12/15
28.8K0
如何在 Windows 10上创建和运行批处理文件
一个通用的java应用程序启动shell脚本
一个通用的java应用程序启动shell脚本 #!/bin/sh current_path=pwd case "uname" in Linux) bin_abs_path=$(readlink -f $(dirname $0)) ;; *) bin_abs_path=cd $(dirname $0); pwd ;; esac base=${bin_abs_path}/.. export LANG=en_US.UTF-8 export USER_C
用户1503405
2021/10/29
7040
SpringBoot中很好玩的一个banner启动控制台效果
先说一个网站:BootSchool 我就那”佛祖“为例: 复制好后,在你自己创建SpringBoot项目中找到resources文件: 创建banner.txt文件 banner.txt文件创建完后粘贴复制的banner即可 最后运行就能看到结果了 这个东西就图一乐,大家可以自己发挥
用户9006224
2022/12/21
7690
SpringBoot中很好玩的一个banner启动控制台效果
Windows 服务 同时启动多个服务
最近需要开发 Windows Service 程序,之前没有接触过,所以把了解到的一些东西记录下来。
独立观察员
2022/12/06
1.6K0
Windows 服务 同时启动多个服务

相似问题

ansible 2.4.2中的ansible switch用户

12

是否可以在ansible剧本中为私人回购代理添加ssh密钥?

11

使用ansible分发ssh密钥

17

在Git Windows中向SSH代理添加SSH密钥

13

在ansible playbook文件中指定ssh密钥

331
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文