【发布时间】:2018-07-10 01:52:43
【问题描述】:
应该是一个简单的问题...但我无法确定!这是一个简单的布局,旨在显示一个说明标题的图标,文本略高于图标。目的是让图标与文本垂直居中,但由于某种原因,无论文本/图标大小,图标都比它应该高几个像素。 (图标是可绘制的矢量,以防万一。)
布局
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp">
<ImageView
android:id="@+id/icon_readings_raw"
android:src="@drawable/ic_equals"
android:tint="@color/colorPrimary"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginEnd="7dp"/>
<TextView
android:text="Raw sensor readings"
android:textAllCaps="true"
android:textColor="@color/colorPrimary"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/icon_readings_raw"/>
</RelativeLayout>
结果
问题
如何使图标与文本居中?不要求骇人听闻的解决方案和神奇的数字,请告诉我为什么 android:layout_centerVertical="true" 没有按预期工作。
编辑#1
在@AntonMakov 的小探索之路上,我得出的结论是,这可能取决于亚像素渲染优化和预览窗口的性质。我的预览设置为 Nexus 5X & API27。使用?android:attr/textAppearanceSmall TextView 呈现正好为 19sp;玩图标高度我注意到,当它设置为{19,13,9,7,3}sp 时,图标呈现垂直居中。当从19sp 中减去这些数字时,我们得到{0,6,10,12,16}sp...总是一个偶数。这是有道理的,因为只有这样你才能获得相同数量的屏幕顶部和底部。
我还不明白为什么不是所有的增量都产生正确的结果(例如,TextView 设置为 19sp 和 ImageView 设置为 15sp增量为 4)。此外,“正确”的组合取决于所选的设备(Nexus 6 的行为略有不同),并且在模拟器中显示时看起来也略有不同。
现在怎么办?我们应该相信 Android 操作系统在实际设备上正确吗?是否应该归咎于预览——对真实事物的远非精确的近似,其计算不需要太认真?
【问题讨论】:
-
改用
android:centerVertical="true" -
您可以通过仅使用 TextView 和使用 drawable left 并将 src 设置为 imageview 来组合它们。您可以使用可绘制填充来更改与它的距离
-
@AntonMakov 这是我最初的想法,但是改变图标的大小和居中会更加成问题,尤其是在 API 21 上。
-
@Jacky 未知属性 android:centerVertical 恐怕。
-
为什么不使用
ConstraintLayout而不是相对布局。它比相对布局更灵活,并且可以比使用 recyclerview 轻松定位项目
标签: android android-layout android-relativelayout