【问题标题】:Positioning in ConstraintLayout causes HorizontalScrollView to cut off content在 ConstraintLayout 中定位导致 Horizo​​ntalScrollView 截断内容
【发布时间】:2018-01-12 12:31:02
【问题描述】:
<android.support.constraint.ConstraintLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="14"
        android:layout_gravity="bottom"
        android:background="@drawable/object_detailed_information_bar"
        android:padding="@dimen/object_detailed_information_bar_padding">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:id="@+id/object_type_icon_image_view"
            android:scaleType="fitXY"
            android:adjustViewBounds="true"
            android:src="@drawable/restaurant_marker_icon"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

        <HorizontalScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/object_name_text_view_margin_start_or_left"
            android:layout_marginStart="@dimen/object_name_text_view_margin_start_or_left"
            app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintLeft_toRightOf="@id/object_type_icon_image_view">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/object_name_text_view"
                android:scrollHorizontally="true"
                android:lines="1" />
        </HorizontalScrollView>

    </android.support.constraint.ConstraintLayout>

我使用app:layout_constraintLeft_toRightOf="@id/object_type_icon_image_view" 将由 ScrollHorizo​​ntalView 包裹的 TextView 定位到 ImageView 的右侧。但这也引起了异常行为。存储在 TextView 中的文本可以滚动,但会被几个字母截断。当我删除此行app:layout_constraintLeft_toRightOf="@id/object_type_icon_image_view" 时,文本在滚动时会完全显示。有没有办法解决这个问题?

屏幕:

android:text="123456789123456789123456789123456789123456789123456789"
  1. 位于 ImageView 右侧时滚动前

  2. 滚动后定位到 ImageView 的右侧 - 它被切断

  3. 滚动前无定位

  4. 滚动后没有定位 - 没关系

【问题讨论】:

  • 截图说明

标签: android android-layout textview horizontalscrollview android-constraintlayout


【解决方案1】:

简答:

HorizontalScrollView 的宽度更改为 0dp 并将其右侧边缘限制为父级:

android:layout_width="0dp"
app:layout_constraintRight_toRightOf="parent"

说明:

现在,您的 HorizontalScrollView 正在使用 wrap_content 作为其宽度。这使它尝试与文本一样长,但父级(ConstraintLayout)不允许其子级的宽度大于自身。所以你的HorizontalScrollView 最终与ConstraintLayout 的宽度相同。

但是,您已定位HorizontalScrollView,使其略微向右移动。这意味着视图的一部分是不可见的; ConstraintLayout 正在剪裁HorizontalScrollView

要解决此问题,您需要确保HorizontalScrollView 与图像右边缘和父图像右边缘之间的空间一样宽。您已经对HorizontalScrollView 有一个左约束,因此您需要添加一个右约束。一旦两边都被约束,就可以用0dp的宽度来表示“匹配约束”;现在HorizontalScrollView 将根据可用空间调整自身大小。

【讨论】:

    【解决方案2】:
    <?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:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/object_type_icon_image_view"
            android:layout_width="200dp"
            android:layout_height="0dp"
            android:src="@color/link_blue"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <HorizontalScrollView
            android:id="@+id/horizontalScrollView"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@color/red"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/object_type_icon_image_view"
            app:layout_constraintTop_toTopOf="parent">
    
            <TextView
                android:id="@+id/object_name_text_view"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="Horizontal Scroll View"
                android:textSize="25sp"
                android:gravity="center"
                tools:layout_editor_absoluteX="16dp"
                tools:layout_editor_absoluteY="16dp" />
    
        </HorizontalScrollView>
    
    </android.support.constraint.ConstraintLayout>
    

    你需要这个吗?

    【讨论】:

    • 添加了一些屏幕
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多