设置Horizo​​ntalScrollView的约束

时间:2018-06-26 10:02:19

标签: android android-constraintlayout 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)。

enter image description here

您能帮我找出我做错了什么吗?我试图将约束放在horizontal_scroll_containerHorizontalScrollView中,但似乎没有任何作用。

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

1 个答案:

答案 0 :(得分:2)

您可以做的是将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更改为0dpMATCH_CONSTRAINT),因此ScrollView的容器占用了所有可用的水平空间。

实际上,根本不需要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>