我被 ConstraintLayout 卡住了,并且对使用哪个属性来做我想做的事情感到困惑。
根据下图,我想根据视图的高度将

场景:
如果我将详细视图的顶部约束作为 OrderTakenBy TextView 的底部,如果它获得更多行,它将与 OrderCollectedBy Textview 的视图重叠(如下图)。反之亦然。

注意:Order Taken By 或 Order Collected By 可能包含两行或三行。
那么对于可以同时适用于两个动态高度的顶部约束,我该怎么做呢?
编辑:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".activity.AccountMasterAddActivity" tools:showIn="@layout/activity_account_master_add"> <TextView android:id="@+id/textView2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginEnd="4dp" android:text="@string/hint_order_no" android:textColor="@color/colorAccent" app:layout_constraintEnd_toStartOf="@+id/guideline" app:layout_constraintStart_toStartOf="@+id/supplierNameTextView" app:layout_constraintTop_toBottomOf="@+id/supplierNameTextView" /> <TextView android:id="@+id/orderNoTextView" style="@style/TextAppearance.AppCompat.Medium" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="@+id/textView2" app:layout_constraintStart_toStartOf="@+id/textView2" app:layout_constraintTop_toBottomOf="@+id/textView2" tools:text="TextView" /> <TextView android:id="@+id/textView4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:text="@string/hint_supplier_name" android:textColor="@color/colorAccent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/supplierNameTextView" style="@style/TextAppearance.AppCompat.Medium" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="@+id/textView4" app:layout_constraintStart_toStartOf="@+id/textView4" app:layout_constraintTop_toBottomOf="@+id/textView4" tools:text="TextView" /> <TextView android:id="@+id/textView6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="4dp" android:gravity="end" android:text="@string/hint_order_date" android:textColor="@color/colorAccent" app:layout_constraintEnd_toEndOf="@+id/supplierNameTextView" app:layout_constraintStart_toStartOf="@+id/guideline" app:layout_constraintTop_toTopOf="@+id/textView2" /> <TextView android:id="@+id/orderDateTextView" style="@style/TextAppearance.AppCompat.Medium" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:gravity="end" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="@+id/textView6" app:layout_constraintStart_toStartOf="@+id/textView6" app:layout_constraintTop_toBottomOf="@+id/textView6" tools:text="TextView" /> <TextView android:id="@+id/textView8" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginEnd="4dp" android:text="@string/hint_order_taken_by" android:textColor="@color/colorAccent" app:layout_constraintEnd_toStartOf="@+id/guideline" app:layout_constraintStart_toStartOf="@+id/orderNoTextView" app:layout_constraintTop_toBottomOf="@+id/orderNoTextView" /> <TextView android:id="@+id/orderTakenByTextView" style="@style/TextAppearance.AppCompat.Medium" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:text="TextView TextView" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="@+id/textView8" app:layout_constraintStart_toStartOf="@+id/textView8" app:layout_constraintTop_toBottomOf="@+id/textView8" /> <TextView android:id="@+id/textView10" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="end" android:text="@string/hint_order_collected_by" android:textColor="@color/colorAccent" app:layout_constraintEnd_toEndOf="@+id/orderDateTextView" app:layout_constraintStart_toStartOf="@+id/orderDateTextView" app:layout_constraintTop_toTopOf="@+id/textView8" /> <TextView android:id="@+id/orderCollectedByTextView" style="@style/TextAppearance.AppCompat.Medium" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:gravity="end" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="@+id/textView10" app:layout_constraintStart_toStartOf="@+id/textView10" app:layout_constraintTop_toBottomOf="@+id/textView10" tools:text="TextView TextView TextView TextView TextView" /> <TextView android:id="@+id/textView12" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:text="@string/hint_details" android:textColor="@color/colorAccent" app:layout_constraintEnd_toEndOf="@+id/orderCollectedByTextView" app:layout_constraintStart_toStartOf="@+id/orderTakenByTextView" app:layout_constraintTop_toBottomOf="@+id/orderCollectedByTextView" /> <TextView android:id="@+id/detailsTextView" style="@style/TextAppearance.AppCompat.Medium" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:autoLink="phone" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="@+id/textView12" app:layout_constraintStart_toStartOf="@+id/textView12" app:layout_constraintTop_toBottomOf="@+id/textView12" tools:text="TextView" /> <TextView android:id="@+id/productLabel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:text="Products" android:textColor="@color/colorAccent" app:layout_constraintEnd_toEndOf="@+id/detailsTextView" app:layout_constraintStart_toStartOf="@+id/detailsTextView" app:layout_constraintTop_toBottomOf="@+id/detailsTextView" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline" android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintGuide_percent="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginTop="2dp" android:layout_marginBottom="4dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/productLabel" app:layout_constraintStart_toStartOf="@+id/productLabel" app:layout_constraintTop_toBottomOf="@+id/productLabel" /> </androidx.constraintlayout.widget.ConstraintLayout> |
有人可以帮忙吗?
您可以使用屏障来克服这个问题。
Barrier 引用多个小部件作为输入,并根据指定侧的最极端小部件创建虚拟指南。例如,左屏障将与所有引用视图的左侧对齐。
这里是屏障的文档
将接受的订单或收集的订单添加为
XML 参考:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | android:id="@+id/barrier" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="411dp" app:barrierDirection="bottom" app:constraint_referenced_ids="order_taken_by,order_collected_by" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" tools:layout_editor_absoluteY="21dp"/> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/detail" android:layout_width="0dp" android:layout_height="wrap_content" android:text="New" android:textSize="@dimen/_16sp" app:layout_constraintTop_toBottomOf="@+id/barrier"/> |
这是输出:

Use bottom barrier
Use Deatils textview top constraint to barrier and barrier reference to OrderTakenBy, OrderCollectedBy textview.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <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="match_parent"> <TextView android:id="@+id/OrderTakenBy" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:text="warehouse sdgjklsdj jgkjskg" app:layout_constraintEnd_toStartOf="@+id/OrderCollectedBy" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/OrderCollectedBy" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:text="hospital fhkhsf" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/OrderTakenBy" app:layout_constraintTop_toTopOf="parent" /> <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="OrderCollectedBy, OrderTakenBy" /> <TextView android:id="@+id/Details" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="10dp" android:text="lorem_ipsum" android:gravity="center" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/barrier" /> </androidx.constraintlayout.widget.ConstraintLayout> |
我认为您可以将
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
我从用户Hirolau那里找到了这段代码:defsum_to_n?(a,n)a.combination(2).find{|x,y|x+y==n}enda=[1,2,3,4,5]sum_to_n?(a,9)#=>[4,5]sum_to_n?(a,11)#=>nil我如何知道何时可以将两个参数发送到预定义方法(如find)?我不清楚,因为有时它不起作用。这是重新定义的东西吗? 最佳答案 如果您查看Enumerable#find的文档,您会发现它只接受一个block参数。您可以将它发送两次的原因是因为Ruby可以方便地让您根据它的“并行赋
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
我已经有很多两个值数组,例如下面的例子ary=[[1,2],[2,3],[1,3],[4,5],[5,6],[4,7],[7,8],[4,8]]我想把它们分组到[1,2,3],[4,5],[5,6],[4,7,8]因为意思是1和2有关系,2和3有关系,1和3有关系,所以1,2,3都有关系我如何通过ruby库或任何算法来做到这一点? 最佳答案 这是基本Bron–Kerboschalgorithm的Ruby实现:classGraphdefinitialize(edges)@edges=edgesenddeffind_maximum_
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote
我有两个具有以下格式的哈希mydetails[x['Id']]=x['Amount']这将包含如下数据hash1={"A"=>"0","B"=>"1","C"=>"0","F"=>"1"}hash2={"A"=>"0","B"=>"3","C"=>"0","E"=>"1"}我期待这样的输出:Differencesinhash:"B,F,E"非常感谢任何帮助。 最佳答案 这个解决方案可能更容易理解:(hash1.keys|hash2.keys).select{|key|hash1[key]!=hash2[key]}Array#|返回2
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?