android-studio - 不能将元素约束到障碍
问题描述
我遇到了一个问题,我试图将按钮限制在垂直屏障上。当我将要约束到障碍的按钮一侧拖动时,它似乎无法识别障碍。将鼠标悬停在其上并放开后,它不会捕捉到它或应用任何约束。
我尝试从 YouTube 复制一个简单的教程,他将按钮限制在障碍物上,在时间戳链接上没有问题:https ://youtu.be/Ngz5cgLC7m4?t=180 。
我知道您可以将屏障 ID 添加到 Button 的 XML 左侧约束中。但这并不能完全解决根本问题。
我还检查了我的版本当前关于障碍的变更日志(没有任何改变)。
编辑:这是我的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<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/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4" />
<android.support.constraint.Barrier
android:id="@+id/barrier3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="end"
app:constraint_referenced_ids="textView5,textView4"
tools:layout_editor_absoluteX="411dp" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="173dp"
tools:layout_editor_absoluteY="64dp" />
</android.support.constraint.ConstraintLayout>
解决方案
图形设计编辑器会出现一些小问题,例如您不能 100% 确定它没有使用absoluteX
和absoluteY
而不是约束。我总是更喜欢文本编辑器,因为您知道代码,因为您可以查看代码并根据需要修改它。
因此,我检查了您的代码,发现您使用的是absoluteX
andabsoluteY
而不是按钮的约束。您可以将其限制为障碍
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
//These two constraints will set the position on Horizontal axis
app:layout_constraintStart_toEndOf="@id/barrier3"
app:layout_constraintEnd_toEndOf="parent"
//You should replace it as well with constraints.
tools:layout_editor_absoluteY="64dp" />
现在,如您所见,我已替换absoluteX
为Start_toEndOf
and End_toEndOf
。现在,要设置垂直约束,我实际上不明白为什么 y 的位置是 64dp,但你可以做一件事。使用 Top对其进行约束并将其用作marginTop
Top或您可以使用 Vertical Bias。
您可以将 absoluteY 替换为:
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.1"
Vertical_bias 0.1
会给你类似的结果,它会将你的按钮定位到屏幕尺寸的 10% 并且它是动态的,这意味着它将在任何屏幕尺寸上的相同位置。
只需用此更改您的代码,我希望您能得到答案。如果需要,您可以问其他任何问题。
推荐阅读
- sql - 为基于 SQL 的报告显示的字符数
- java - 为什么 JProgressBar 一旦添加到 JPanel 就不应更改?
- php - 使用第一个查询中的变量从第二个查询中获取结果时出错
- r - R中的滞后残差作为自变量
- php - 在 null 上调用成员函数 isCollection()
- python - 单击按钮时,Python Flask 停止处理路由
- amazon-web-services - Puppet 代理在 AWS 上的 Ubuntu 16.04 的 POSIX 语言环境中运行
- ruby-on-rails - 什么轨道需要宝石?
- c# - 使用文本框控件asp.net插入数据库
- r - R中的序列组合矩阵