Android支持存储库中提供的一种新类型布局,构建于灵活约束系统之上,标记视图相对于彼此的位置。
Android Material TextInputLayout 错误消息显示在 Material TextInputEditText 子项后面
我目前正在使用 Material 组件创建 Android UI。 在我的活动中,我使用 com.google.android.material.textfield.TextInputLayout 组件的错误功能。 问题是如果...
如何在 reyclerview android 中填充项目宽度子项
嘿我在android 上工作。我想让孩子们适应 recyclerview android 的整个视图。我有水平回收视图。我将在图表中展示我想要的内容。 场景1 当我有更多物品时
我有 2 个视图,我需要在下面设置一个屏障,但该屏障无法按预期工作。 这是我的布局。 我有 2 个视图,我需要在下面设置一个屏障,但该屏障无法按预期工作。 这是我的布局。 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <TextView android:id="@+id/textView15" android:layout_width="0dp" android:layout_height="wrap_content" android:text="This is a text view" app:layout_constraintEnd_toStartOf="@+id/t1" android:textSize="20sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/t1" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/textView15" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a demo text to check wrap content"/> </com.google.android.material.textfield.TextInputLayout> <androidx.constraintlayout.widget.Barrier android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="bottom" app:constraint_referenced_ids="textView15,t1"/> </androidx.constraintlayout.widget.ConstraintLayout> 黑色虚线是屏障。 这可能是一个错误或者我做错了,预览和实际设备中的结果是相同的 如果您指定 app:layout_optimizationLevel="none" 在ConstraintLayout的XML中,您会发现障碍物将被正确放置。我不确定设置优化级别能达到什么效果,但最近这是一个有障碍的问题。 (ConstraintLayout 版本 2.1.3)。 这是抑制优化之前布局的样子。如前所述,屏障上升到右侧 TextView。 我们通过在 XML 中声明而不进行其他更改来抑制优化: <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_optimizationLevel="none" xmlns:app="http://schemas.android.com/apk/res-auto"> 现在布局如下所示: 障碍物已降至其所属的右侧TextView下方。 这是与 ConstraintLayout 版本 2.1.3 一起使用的。 implementation 'androidx.constraintlayout:constraintlayout:2.1.3' (似乎将优化级别设置为除standard之外的任何值都可以解决此问题。) 添加 app:layout_constrainedHeight="true" 障碍引用的视图解决了我的问题。 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <TextView android:id="@+id/textView15" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" android:text="This is a text view" app:layout_constraintEnd_toStartOf="@+id/t1" android:textSize="20sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/t1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/textView15" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a demo text to check wrap content"/> </com.google.android.material.textfield.TextInputLayout> <androidx.constraintlayout.widget.Barrier android:id="@+id/barrier" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="bottom" app:constraint_referenced_ids="textView15,t1"/> <Space android:id="@+id/space" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/barrier" /> </androidx.constraintlayout.widget.ConstraintLayout> 正如之前所写,ConstraintLayout 2.1.3 和 2.1.4 版本无法正常工作,您可以将其降级到 2.0.0。如果没有,您可以使用两种方法。在这两种情况下都删除 <androidx.constraintlayout.widget.Barrier>。 插入LinearLayout以占据所需的视图。例如,如果水平位置有 2 个 TextInputLayout,则可以这样写: <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/upper_view"> <com.google.android.material.textfield.TextInputLayout android:id="@+id/input_layout_1" android:layout_weight="1" ... <com.google.android.material.textfield.TextInputLayout android:id="@+id/input_layout_2" android:layout_weight="1" ... </LinearLayout> 如果您有具有不同视图的复杂布局,请这样写。 <Space android:id="@+id/space" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="@id/input_layout_2" app:layout_constraintTop_toBottomOf="@+id/upper_view" /> 那么你应该在代码中更改 Space 高度。也许您可以将此代码应用于所有TextInputLayout。 // View size change listener private fun View.onSizeChange(callback: () -> Unit) { addOnLayoutChangeListener(object : OnLayoutChangeListener { override fun onLayoutChange( view: View?, left: Int, top: Int, right: Int, bottom: Int, oldLeft: Int, oldTop: Int, oldRight: Int, oldBottom: Int, ) { view?.removeOnLayoutChangeListener(this) if (right - left != oldRight - oldLeft || bottom - top != oldBottom - oldTop) { callback() } } }) } binding.inputLayout2.onSizeChange { // First remove bottom constraint val layoutParams = binding.space.layoutParams as ConstraintLayout.LayoutParams layoutParams.bottomToBottom = ConstraintLayout.LayoutParams.UNSET // Now set height of a <Space> (maximum of two TextInputLayouts) val h1 = binding.inputLayout1.height val h2 = binding.inputLayout2.height binding.inputLayout2.postDelayed({ binding.space.updateLayoutParams { height = max(h1, h2) } }, 1) } 然后将底部视图绑定到 LinearLayout 或 Space 而不是 Barrier。 仅需要 app:layout_optimizationLevel="barrier"。 如果我们使用 app:layout_optimizationLevel="none" 布局渲染可能需要更长的时间,因为每个约束都会被更彻底地重新评估。对于复杂的布局,这可能会导致性能问题。
MotionLayout 动画无法与 Jetpack Compose 中的 LazyColumn 一起正常工作的问题
我正在尝试使用 Jetpack Compose 中的 androidx.constraintlayout.compose 版本 1.1.0-alpha09 库来实现带有滑动手势的 MotionLayout 动画。但是,我面临一个问题......
ConstraintLayout 中的layout_constraintHorizontal_weight = 1 不起作用
TextInputLayout 中的 TextInputEditText 使用 wight 属性与 ConstraintLayout 中的宽度相等。使用layout_constraintHorizontal_weight = 1不起作用。如何使用Textinputlayout的weight属性给予相同的宽度。 这是下面的结果。
Compose ConstraintLayout 不尊重约束
我正在尝试使用约束布局来放置我的元素,但是当该元素的内容大于可用空间时,它们并没有真正尊重我给它们的约束。 难道是……
我在运行时视图上设置带有边距的约束时遇到了某种麻烦。 这些是向用户显示视图时的 y 坐标和边距坐标 我这样设置边距:
我想将下部视图与顶部视图的左边缘对齐 在此输入图像描述 但他们就这样消失了: 在此输入图像描述 我想将下部视图与顶部视图的左边缘对齐 在此输入图片描述 但他们就这样走了: 在此输入图片描述 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.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" tools:context=".MainActivity"> <ImageButton android:id="@+id/imageButton" android:layout_width="120dp" android:layout_height="120dp" android:layout_marginStart="56dp" android:layout_marginTop="24dp" android:scaleType="centerCrop" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/ic_code" /> <ImageButton android:id="@+id/imageButton" android:layout_width="120dp" android:layout_height="120dp" android:scaleType="centerCrop" app:srcCompat="@drawable/ic_code" tools:layout_editor_absoluteX="56dp" tools:layout_editor_absoluteY="174dp" /> <ImageButton android:id="@+id/imageButton" android:layout_width="120dp" android:layout_height="120dp" android:scaleType="centerCrop" app:srcCompat="@drawable/ic_code" tools:layout_editor_absoluteX="56dp" tools:layout_editor_absoluteY="333dp" /> <ImageButton android:id="@+id/imageButton" android:layout_width="120dp" android:layout_height="120dp" android:scaleType="centerCrop" app:srcCompat="@drawable/ic_code" tools:layout_editor_absoluteX="56dp" tools:layout_editor_absoluteY="501dp" /> </androidx.constraintlayout.widget.ConstraintLayout> 我已经做过很多次了,但它一直这样。 您发布的约束布局不准确且不正确。所有观点都不受彼此约束。 我们是这样做的: <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.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" tools:context=".MainActivity" android:paddingStart="56dp"> // this aligns all the child views to 56 dp from the Start <ImageButton android:id="@+id/imageButton" android:layout_width="120dp" android:layout_height="120dp" android:layout_marginTop="24dp" android:scaleType="centerCrop" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/ic_code" /> <ImageButton android:id="@+id/imageButton1" android:layout_width="120dp" android:layout_height="120dp" android:layout_marginTop="30dp" // add the required dp for gap between 2nd and 1st image android:scaleType="centerCrop" app:srcCompat="@drawable/ic_code" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/imageButton" /> <ImageButton android:id="@+id/imageButton2" android:layout_width="120dp" android:layout_height="120dp" android:layout_marginTop="30dp" android:scaleType="centerCrop" app:srcCompat="@drawable/ic_code" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/imageButton1" /> <ImageButton android:id="@+id/imageButton3" android:layout_width="120dp" android:layout_height="120dp" android:layout_marginTop="30dp" android:scaleType="centerCrop" app:srcCompat="@drawable/ic_code" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/imageButton2" /> </androidx.constraintlayout.widget.ConstraintLayout> 请根据您的需求约束您的子视图,约束布局提供了多种约束选项,建议您参考Android的文档:https://developer.android.com/develop/ui/views/layout /约束布局
我有一个 Activity,其 xml 布局包含 Constraint 布局和 Linearlayout、RecyclerView 作为它的子布局。 我有一个按钮绑定到适配器上的 onCLick 侦听器,每次单击都是
Android:相对侧的两个视图没有重叠,占用的空间与其内容一样小
我有一个非常简单但令人沮丧的问题: 我在布局中有两个视图。布局可以是任何布局,但我一直在尝试使用 ConstraintLayout。 我想要这两种相反的观点...
在 Android ConstraintLayout 中创建可变数量 n 的网格 (n × n)
我想在ConstraintLayout中创建一个方形网格。我的第一个想法是创建一个水平链,给出一些边距值并设置为所有单视图大小属性 width = match_constraint,
Android:如何设置最大宽度以匹配父级的宽度与layout_width =“wrap_content”?
下面的 TextView 的宽度需要匹配其内容宽度(在 ConstraintLayout 中),但是当内容包含长文本时,它当前水平延伸超出了 p 的宽度...
最近尝试实现约束布局,但我发现屏障和指南的工作原理相同。两者都像分隔线一样工作。他们之间有什么区别吗?
使用 Android 的 ConstraintLayout 设置两个视图之间的最大间距
我想知道在Android中是否有任何方法可以使用ConstraintLayout在使用Chains时设置两个视图之间的最大间距。我知道使用边距属性的效果至少是这样
我有一个大约有 12/13 个字段的表单。我在约束布局中使用了滚动视图。下面是 XML 布局的层次结构。问题是,它不会滚动到底部而是滚动......
我有这个xml,但只有当我硬调整图像的宽度和高度时才会显示图像。我不确定为什么我在代码中提供的约束不起作用。 我有这个 xml,但仅当我硬调整图像的宽度和高度时才会显示图像。我不确定为什么我在代码中提供的约束不起作用。 <merge 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="wrap_content" android:layout_height="wrap_content" tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> <androidx.cardview.widget.CardView android:id="@+id/cardview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="4dp" android:layout_marginStart="4dp" android:layout_marginTop="4dp" app:cardCornerRadius="4dp" app:cardElevation="2dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <ImageView android:id="@+id/cover" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" android:importantForAccessibility="no" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:src="@drawable/placeholder" /> </androidx.cardview.widget.CardView> </merge> 注意:我无法将其更改为撰写,这是某些遗留代码的一部分。 请注意,<ImageView标签的这一部分是无操作的(您可以安全地删除它们) app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" 因为这些属性只能通过父子ConstraintLayout来读取,这是不正确的,它肯定是CardView...以及CardView的父级,好吧,这取决于膨胀的位置,也许CardView应该有这样的参数,在由 ConstaintLayout 严格托管时将会/应该工作
jetpack 中的偏差构成ConstraintLayout
例如,我希望当文本宽度小于屏幕宽度时,右侧与图像的起始位置对齐,当文本宽度大于屏幕宽度时,文本将自动换行...
我创建了一些基于ContraintLayout 的自定义视图,它基本上是文本视图和其他一些组件的配对。 EditTextCompat 和 SwitchCompat。 他们俩基本上都是创造...
如何在 Kotlin 上的 ConstraintLayout 中限制 CardView 内的 ScrollView 内容。在运行时内容显示出界
我在 ConstraintLayout 中的 CardView 内的 ScrollView 内容上遇到问题。 在“设计”视图中,它显示为我需要的内容,但在运行时,显示的 ScrollView 内容覆盖...
Compose ConstraintLayout 的枢轴未按预期工作?
我正在尝试使用 Compose 的 ConstraintLayout 可组合项将可组合项放置在从顶部到屏幕中间 30% 的位置。 我尝试在约束DSL中使用pivotY属性,但没有成功,