gpt4 book ai didi

android - 如何使用相对布局垂直对齐列表中的项目?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:27:02 24 4
gpt4 key购买 nike

我在 Android 1.5 中使用 ListView 来显示图像列表和图像旁边的文本。我试图将文本垂直居中,但文本位于行的顶部而不是居中。下面是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip">

<ImageView android:id="@+id/item_image" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:paddingRight="10dip"
android:src="@drawable/default_image" android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_centerVertical="true"
android:gravity="center_vertical"/>

<TextView android:id="@+id/item_title"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/item_image"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_centerVertical="true"
android:gravity="center_vertical"
/>

</RelativeLayout>

当我尝试将文本垂直居中时,我需要设置 alignParentTop="true"似乎很奇怪,但如果我不这样做,文本甚至不会显示。我做错了什么?

最佳答案

编辑以下评论:

事实证明,使用 RelativeLayout 进行这项工作并不容易。在答案的底部,我包含了一个 RelativeLayout,它提供了想要的效果,但只是在它包含在 ListView 中之前。之后又出现了问题中描述的相同问题。这是通过使用 LinearLayout(s) 解决的。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:orientation="horizontal">

<ImageView android:id="@+id/pickImageImage"
android:layout_width="100dp"
android:layout_height="80dp"
android:background="@drawable/icon"
android:scaleType="fitXY"
android:layout_marginRight="10dp"/>

<TextView android:id="@+id/pickImageText"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:gravity="left|center_vertical"
android:text="I'm the text"/>

</LinearLayout>

如果你想有两个文本框,你可以在 ImageView 之后嵌套第二个 orientation="vertical" 和 LinearLayout,然后将文本框放在那里。

这行得通,但我不得不承认我不知道为什么 RelativeLayouts 不行。比如这个blog post by Romain Guy具体说 RelativeLayout 应该。当我尝试它时,我从来没有让它完全起作用;诚然,我没有像他那样做完全,但我唯一的改变是 TextViews 的一些属性,这不应该有太大的不同。


这是原始答案:

我认为您将 Android 与 RelativeLayout 中所有那些有些矛盾的指令混淆了。我将你的东西重新格式化为:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip">

<ImageView android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dip"
android:src="@drawable/icon"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>

<TextView android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/item_image"
android:layout_centerVertical="true"
android:text="Blah!"/>

</RelativeLayout>

而且效果很好。我删除了许多多余的 android:layout_alignParentxxx 因为它们不是必需的。这个 View 现在出现在左上角的图片和旁边垂直居中的文本。如果你也希望图片垂直居中,那么你不能让 RelativeLayout 位于 android:layout_height="wrap_content"上,因为它试图使自己不高于图片的高度。你必须指定一个高度,例如80dp,然后使用 android:scaleType="fitXY"将 ImageView 设置为固定高度,如 60dp,使其按比例缩小以适合。

关于android - 如何使用相对布局垂直对齐列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com