我连续有 3 个视图:标题、版本和图像视图(用作按钮):
- 标题应该是
wrap_content
但遵守以下规则
- 版本应该是
wrap_content
,位于标题右侧和图像视图左侧
- imageview 具有固定大小,位于父级的右上角
问题是,如果标题太大,则版本会移至右侧,并且不遵守“版本位于 imageview 左侧”的规则:
所以我需要限制标题宽度并使版本可见而不是移动到右侧。
这是 XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="#b3b2b2">
<!-- -->
<TextView
android:id="@+id/LibraryWithVersionItem.title"
android:layout_width="0dp"
android:textStyle="bold"
android:textSize="@dimen/fontSize18"
android:textColor="@color/mySecondaryDarkColor"
android:layout_height="wrap_content"
android:ellipsize="middle"
tools:text="ExampleLibrary 01234567890123456789012345"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
/>
<Spinner
android:id="@+id/LibraryWithVersionItem.versions"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:textSize="@dimen/fontSize16"
android:textColor="@color/mySecondaryDarkColor"
tools:listitem="@layout/library_version"
android:layout_marginTop="@dimen/margin8"
android:layout_marginLeft="@dimen/margin8"
android:layout_marginRight="@dimen/margin8"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@+id/LibraryWithVersionItem.title"
app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.info"
app:layout_constraintHorizontal_bias="0.0"/>
<TextView
android:id="@+id/LibraryWithVersionItem.sentence"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/LibraryWithVersionItem.title"
tools:text="Some library description in one sentence\nbut two lines"
android:layout_marginTop="@dimen/margin8"
android:layout_marginLeft="@dimen/margin8"
app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.install"
android:layout_marginRight="8dp"
app:layout_constraintHorizontal_bias="0.0"/>
<TextView
android:id="@+id/LibraryWithVersionItem.isInstalled"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/LibraryManager.installed"
android:textColor="#1a7c1a"
android:layout_marginTop="@dimen/margin8"
android:layout_marginBottom="@dimen/margin8"
android:layout_marginLeft="@dimen/margin8"
android:layout_marginRight="@dimen/margin8"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/LibraryWithVersionItem.sentence"
app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.install"
app:layout_constraintHorizontal_bias="0.0"/>
<!-- information button -->
<ImageView
android:id="@+id/LibraryWithVersionItem.info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/margin8"
android:paddingLeft="@dimen/margin8"
android:paddingRight="@dimen/margin8"
android:paddingBottom="@dimen/margin8"
android:scaleType="center"
android:src="@drawable/ic_info_outline_white_24dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<!-- install button -->
<ImageView
android:id="@+id/LibraryWithVersionItem.install"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/margin8"
android:paddingRight="@dimen/margin8"
android:paddingTop="@dimen/margin8"
android:paddingBottom="@dimen/margin8"
android:scaleType="center"
android:src="@drawable/ic_get_app_white_24dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LibraryWithVersionItem.info"/>
</android.support.constraint.ConstraintLayout>
PS 1. layout_width="0dp"
+ app:layout_constraintWidth_default="wrap"
似乎正是我所需要的(“wrap_content 但不打破约束”),但它不起作用(仍然大于所需的大小):
<TextView
android:id="@+id/LibraryWithVersionItem.title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:ellipsize="middle"
android:textColor="@color/mySecondaryDarkColor"
android:textSize="@dimen/fontSize18"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="wrap"
tools:text="ExampleLibrary 01234567890123456789012345"
PS 2.设置版本的最小约束宽度(app:layout_constraintWidth_min="60dp"
)也没有帮助 - 它是不可见的,因为它移得太右了。
标题和版本应该在链中并且app:layout_constraintWidth_default="wrap"
used:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="#b3b2b2">
<!-- information button -->
<ImageView
android:id="@+id/LibraryWithVersionItem.info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/margin8"
android:paddingLeft="@dimen/margin8"
android:paddingRight="@dimen/margin8"
android:paddingBottom="@dimen/margin8"
android:scaleType="center"
android:src="@drawable/ic_info_outline_white_24dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<!-- -->
<TextView
android:id="@+id/LibraryWithVersionItem.title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ellipsize="middle"
android:textColor="@color/mySecondaryDarkColor"
android:textSize="@dimen/fontSize18"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="wrap"
tools:text="ExampleLibrary 01234567890123456789012345"
app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.versions"
android:layout_marginRight="8dp"
android:layout_marginLeft="8dp"
android:paddingBottom="1dp"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0.0"/>
<Spinner
android:id="@+id/LibraryWithVersionItem.versions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/fontSize16"
android:textColor="@color/mySecondaryDarkColor"
tools:listitem="@layout/library_version"
app:layout_constraintRight_toLeftOf="@id/LibraryWithVersionItem.info"
app:layout_constraintLeft_toRightOf="@+id/LibraryWithVersionItem.title"
android:layout_marginRight="0dp"
app:layout_constraintBottom_toBottomOf="@+id/LibraryWithVersionItem.title"
android:layout_marginBottom="0dp"/>
<TextView
android:id="@+id/LibraryWithVersionItem.sentence"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LibraryWithVersionItem.title"
tools:text="Some library description in one sentence\nbut two lines"
android:layout_marginTop="5dp"
android:layout_marginLeft="@dimen/margin8"
app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.install"
android:layout_marginRight="8dp"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginStart="@dimen/margin8"
android:layout_marginEnd="8dp"/>
<TextView
android:id="@+id/LibraryWithVersionItem.isInstalled"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/LibraryManager.installed"
android:textColor="#1a7c1a"
android:layout_marginTop="@dimen/margin8"
android:layout_marginLeft="@dimen/margin8"
android:layout_marginRight="@dimen/margin8"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LibraryWithVersionItem.sentence"
app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.install"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginStart="@dimen/margin8"
android:layout_marginEnd="@dimen/margin8"/>
<!-- install button -->
<ImageView
android:id="@+id/LibraryWithVersionItem.install"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/margin8"
android:paddingRight="@dimen/margin8"
android:paddingTop="@dimen/margin8"
android:paddingBottom="@dimen/margin8"
android:scaleType="center"
android:src="@drawable/ic_get_app_white_24dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LibraryWithVersionItem.info"/>
</android.support.constraint.ConstraintLayout>
我尝试将版本与标题基线对齐,但如果标题有 2 行或更多行,它会与第一行对齐,这是不需要的。所以我必须将版本与标题底部对齐并硬编码标题-3
底部填充。
然而,它在 Android Studio 中看起来符合预期:
but on hardware device it looks different:
When analyzing in Layout Inspector
i can see title width is calculated wrong:
可能是使用它的副作用RecyclerView
但不管怎么说...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)