将视图底部与文本基线对齐

Gus*_*Gus 6 android android-layout android-constraintlayout

在ConstraintLayout中,是否可以将View(例如ImageView)的底部与TextView的基线对齐?我期望会有类似的约束app:layout_constraintBottom_toBaselineOf,但没有类似的约束存在。

注意:我已经尝试过了app:layout_constraintBaseline_toBaselineOf,但是看起来只有在TextView上定义时才起作用。

Gen*_*kin 7

这可能为时已晚,但希望对阅读该帖子的人有所帮助。

在此特定示例中,如果您要将对齐ImageViewTextView的基线,则将的默认对齐方式设置ImageView应用于“顶部”,不确定原因。。很可能要将其应用到的底部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>
Run Code Online (Sandbox Code Playgroud)

AppCompatImageView在项目中使用,但是我很确定常规ImageView将以相同的方式工作。

也可以通过RelativeLayout向加上a 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;
Run Code Online (Sandbox Code Playgroud)

希望对您有所帮助。祝好运!


Ben*_* P. 2

来自开发者指南ConstraintLayout

基线只能约束其他基线

基线对齐

将一个视图的文本基线与另一个视图的文本基线对齐。

由此以及我自己的实验来看,似乎不可能将泛型的View底部或顶部限制为 aTextView的基线。