在ConstraintLayout中,有没有办法将View的底部(例如ImageView)与TextView的基线对齐?我期待有一个像app:layout_constraintBottom_toBaselineOf
这样的约束,但不存在这样的约束。
注意:我已尝试app:layout_constraintBaseline_toBaselineOf
,但看起来只有在TextView上定义时才有效。
答案 0 :(得分:5)
这可能为时已晚,但我希望对阅读帖子的人有所帮助。
在此具体示例中,如果您想将ImageView
与TextView
的基线对齐,ImageView
的默认对齐设置将应用于&# 34; top",不确定原因..很可能你想将它应用到ImageView
的底部,这可以通过设置android:baselineAlignBottom="true"
属性来实现。更多信息:https://developer.android.com/reference/android/widget/ImageView.html#attr_android:baselineAlignBottom
因此ConstraintLayout
的完整代码如下所示:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<android.support.v7.widget.AppCompatImageView
android:id="@+id/imageView"
android:layout_width="96dp"
android:layout_height="96dp"
android:baselineAlignBottom="true"
app:layout_constraintBaseline_toBaselineOf="@id/textView"
app:layout_constraintStart_toEndOf="@id/textView"
app:srcCompat="@drawable/drawable1"
android:contentDescription="@null"/>
</android.support.constraint.ConstraintLayout>
我在我的项目中使用AppCompatImageView
,但我非常确定常规ImageView
的工作方式是否相同。
RelativeLayout
也可以通过向layout_alignBaseline="@id/textView"
添加ImageView
来实现相同的行为。
如果出于某种原因这不起作用,例如你有自定义视图或其他东西,你也可以考虑在运行时进行。
TextView
中有一种名为getLastBaselineToBottomHeight
的方法。它返回最后一个文本基线与此TextView
底部之间的距离。您可以将该值应用于View
的底部边距,这样可以产生相同的效果。虽然该方法仅在Android P中引入,但您可以以相同的方式实现它(根据源代码)。只是一个对我有用的例子:
MarginLayoutParams params = (MarginLayoutParams) rootView.findViewById(R.id.imageView).getLayoutParams();
params.bottomMargin = textView.getPaddingBottom() + textView.getPaint().getFontMetricsInt().descent;
我希望有所帮助。祝你好运!
答案 1 :(得分:1)
来自developer guidelines for ConstraintLayout
:
基线只能限制在其他基线
和
基线对齐
将视图的文本基线与另一个视图的文本基线对齐。
从这一点开始,根据我自己的实验,似乎无法将通用View
的底部或顶部约束到TextView
的基线。 / p>