使用嵌套 TextView 限制 Android Horizontal ScrollView 的宽度
Restrict the Width of an Android Horizontal ScrollView with nested TextView
我已经为列表视图的自定义适配器编写了以下代码。这是我的 row_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<HorizontalScrollView
android:layout_width="300dp"
android:layout_height="24dp"
android:id="@+id/horizontalScrollView">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="111111111111111111111111111111111111111111111111111111"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:scrollHorizontally="true"
android:maxLines = "1"
android:textSize="18sp" />
</HorizontalScrollView>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/horizontalScrollView"
android:layout_marginTop="5dp"
android:text=".99"
android:textColor="@android:color/black" />
<ImageView
android:id="@+id/store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_favorite_border_black_24dp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp" />
</RelativeLayout>
我将文本视图放在水平滚动视图中,因为很多文本项都很长。上面的代码确实使它从左到右滚动并将其限制为一行,但是我希望 scrollView 在 imageView 之前结束。下面是所需功能的图片:
然而,当我 运行 应用程序时,文本会直接溢出到 imageView 的顶部。
关于如何更正此问题的任何想法?
更新 1:这是我目前得到的:
这是因为 RelativeLayout 将它的一个视图放在另一个视图之上,当您滚动 HorizontalScrollView 时,您实际上是在重绘它,它被绘制在 ImageView 的顶部。
尝试将RelativeLayout替换为LinearLayout,看看是否修复。
编辑:
我没有看到下面的图片。
好吧,这是因为您使用的是相对布局,并且 HorizontalScrollView 的宽度为 match_parent,并且视图在彼此的顶部透支。
尝试使用 width=0px 和 weight=1
的 LinearLayout
编辑 2:
好的,所以你想要 Price - HorizontalScreenView - ImageView?
这是完整的代码,只需复制并粘贴即可。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/horizontalScrollView"
android:layout_marginTop="5dp"
android:text=".99"
android:textColor="@android:color/black" />
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="0px"
android:layout_height="24dp"
android:layout_weight="1">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:maxLines="1"
android:scrollHorizontally="true"
android:text="111111111111111111111111111111111111111111111111111111"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textSize="18sp" />
</HorizontalScrollView>
<ImageView
android:id="@+id/store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/ic_favorite_border_black_24dp" />
</LinearLayout>
我已经为列表视图的自定义适配器编写了以下代码。这是我的 row_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<HorizontalScrollView
android:layout_width="300dp"
android:layout_height="24dp"
android:id="@+id/horizontalScrollView">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="111111111111111111111111111111111111111111111111111111"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:scrollHorizontally="true"
android:maxLines = "1"
android:textSize="18sp" />
</HorizontalScrollView>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/horizontalScrollView"
android:layout_marginTop="5dp"
android:text=".99"
android:textColor="@android:color/black" />
<ImageView
android:id="@+id/store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_favorite_border_black_24dp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp" />
</RelativeLayout>
我将文本视图放在水平滚动视图中,因为很多文本项都很长。上面的代码确实使它从左到右滚动并将其限制为一行,但是我希望 scrollView 在 imageView 之前结束。下面是所需功能的图片:
然而,当我 运行 应用程序时,文本会直接溢出到 imageView 的顶部。
关于如何更正此问题的任何想法?
更新 1:这是我目前得到的:
这是因为 RelativeLayout 将它的一个视图放在另一个视图之上,当您滚动 HorizontalScrollView 时,您实际上是在重绘它,它被绘制在 ImageView 的顶部。
尝试将RelativeLayout替换为LinearLayout,看看是否修复。
编辑: 我没有看到下面的图片。 好吧,这是因为您使用的是相对布局,并且 HorizontalScrollView 的宽度为 match_parent,并且视图在彼此的顶部透支。 尝试使用 width=0px 和 weight=1
的 LinearLayout编辑 2: 好的,所以你想要 Price - HorizontalScreenView - ImageView? 这是完整的代码,只需复制并粘贴即可。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/horizontalScrollView"
android:layout_marginTop="5dp"
android:text=".99"
android:textColor="@android:color/black" />
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="0px"
android:layout_height="24dp"
android:layout_weight="1">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:maxLines="1"
android:scrollHorizontally="true"
android:text="111111111111111111111111111111111111111111111111111111"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textSize="18sp" />
</HorizontalScrollView>
<ImageView
android:id="@+id/store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/ic_favorite_border_black_24dp" />
</LinearLayout>