为 Horizo​​ntalScrollView 设置约束

Set up constraints for HorizontalScrollView

我有如下布局。

<?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"
    android:maxHeight="50dp"
    tools:context=".navigation.NavigationFragment">

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/horizontal_scroll_container"
        app:layout_constraintLeft_toLeftOf="parent">

        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Button1XXX"
                    style="?android:attr/borderlessButtonStyle"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Button2"
                    style="?android:attr/borderlessButtonStyle"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Button3"
                    style="?android:attr/borderlessButtonStyle"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Button4"
                    style="?android:attr/borderlessButtonStyle"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Button5"
                    style="?android:attr/borderlessButtonStyle"/>

            </LinearLayout>
        </HorizontalScrollView>
    </FrameLayout>

    <FrameLayout
        android:id="@+id/search_layout"
        android:layout_width="58dp"
        android:layout_height="match_parent"
        android:background="@color/colorAccent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@id/horizontal_scroll_container"/>

</android.support.constraint.ConstraintLayout>

我想要实现的是让滚动视图在粉红色方块下滚动以显示最新按钮(Button 5 在这种情况下)。

你能帮我找出我做错了什么吗?我试图在 horizontal_scroll_containerHorizontalScrollView 中添加约束,但似乎没有任何效果。

P.S。我不是 Android 开发者,请耐心等待 ;)

您可以将 FrameLayout 限制在 search_layout 的左侧,这样它们就不会重叠。这样最后一个 Button 将完全可见。

<FrameLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:id="@+id/horizontal_scroll_container"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@id/search_layout">

width 已更改为 0dp (MATCH_CONSTRAINT) 因此 ScrollView 的容器占用所有可用的水平 space.

事实上,根本不需要FrameLayout容器。 HorizontallScrollViewFrameLayout 的子类,因此无需嵌套它们。通过将 HorizontalScrollView 作为 ConstraintLayout:

的直接子代可以实现相同的结果
<?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"
    android:maxHeight="50dp"
    tools:context=".navigation.NavigationFragment">

    <HorizontalScrollView
        android:id="@+id/horizontal_scroll"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/search_layout">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button1"
                style="?android:attr/borderlessButtonStyle"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button2"
                style="?android:attr/borderlessButtonStyle"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button3"
                style="?android:attr/borderlessButtonStyle"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button4"
                style="?android:attr/borderlessButtonStyle"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button5"
                style="?android:attr/borderlessButtonStyle"/>

        </LinearLayout>
    </HorizontalScrollView>

    <FrameLayout
        android:id="@+id/search_layout"
        android:layout_width="58dp"
        android:layout_height="match_parent"
        android:background="@color/colorAccent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@id/horizontal_scroll"/>

</android.support.constraint.ConstraintLayout>