在ConstraintLayout中定位会导致Horizo​​ntalScrollView切断内容

时间:2018-01-12 12:31:02

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

Q.all(arrayOfPromises).spread(function() {
    var results = [];
    for (var i = 0; i < arguments.length; i++) {
        var oneResult = arguments[i];
        // oneResult is the result of the i'th promise in arrayOfPromises
        results[i] = oneResult;
    }
    return res.sent(results);
}).fail(function(err) {
    // handle the error
});

我将ScrollHorizo​​ntalView包装的TextView定位为使用<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> 的ImageView的右侧。但它也导致了无法解释的行为。存储在TextView中的文本可以滚动,但它被几个字母切断。当我删除此行app:layout_constraintLeft_toRightOf="@id/object_type_icon_image_view"时,文本会在滚动时完全显示。有没有办法解决这个问题?

屏幕:

app:layout_constraintLeft_toRightOf="@id/object_type_icon_image_view"
  1. 在定位到ImageView右侧之前滚动 Before scroll

  2. 定位到ImageView右侧后滚动 - 它被切断 enter image description here

  3. 滚动前没有定位 enter image description here

  4. 滚动后没有定位 - 没关系 enter image description here

2 个答案:

答案 0 :(得分:0)

<?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>
你需要这个吗?

enter image description here

答案 1 :(得分:0)

简答:

HorizontalScrollView的宽度更改为0dp并将其右边缘约束为父级:

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

<强>解释

目前,您的HorizontalScrollView正在使用wrap_content作为宽度。这使得它尝试与文本一样长,但父级(ConstraintLayout)不允许其子级的宽度大于其自身。因此,HorizontalScrollView的宽度与ConstraintLayout的宽度相同。

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

要解决此问题,您需要确保HorizontalScrollView与图像右边缘和父图像右边缘之间的空间一样宽。您已在HorizontalScrollView上设置左边约束,因此需要添加正确的约束。一旦双方都受到约束,你可以使用0dp的宽度来表示&#34;匹配约束&#34 ;;现在HorizontalScrollView将自己调整为可用空间。