CoordinatorLayout의 도구 모음 아래에보기 추가


176

다음과 같은 레이아웃이 있습니다.

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</android.support.design.widget.CoordinatorLayout>

나는 추가 Fragment에들 FrameLayout을 대체. 내 중 하나는 Fragment다음과 같은 레이아웃을 가진 목록입니다.

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

내 문제는 툴바가 목록 위에 그려져 있다는 것 입니다. 나는의 내용을 포장하여 해당를 해결하기 위해 노력 CoordinatorLayoutLinearLayout오버 드로를 해결,하지만 그런 식으로 행동을 더 이상 작동하지 스크롤 appbar.

어떤 도움이라도 대단히 감사합니다!

답변:


355

속성을 가지고

app:layout_behavior="@string/appbar_scrolling_view_behavior"

아래에서 표시하려고하는 곳에 RecyclerView놓습니다 .FrameLayoutToolbar

스크롤보기 동작이하는 중요한 일 중 하나는 툴바 아래에 구성 요소를 배치하는 것입니다. FrameLayout는 ( RecyclerView) 을 스크롤하는 자손이 있기 CoordinatorLayout때문에을 이동하기위한 스크롤 이벤트를 얻습니다 Toolbar.


그 레이아웃 동작이 발생합니다 :의 또 한가지는 알고 있어야 FrameLayout높이 크기의 수 는 것처럼 Toolbar이미 스크롤 과 함께 Toolbar완벽하게 뷰의 바닥의 바닥 아래에 단순히 너무 아래로 밀려 전체보기를 표시 CoordinatorLayout.

이것은 나에게 놀라운 일이었다. 툴바를 위아래로 스크롤하면 뷰의 크기가 동적으로 조정될 것으로 예상되었습니다. 따라서보기 하단에 고정 구성 요소가있는 스크롤 구성 요소가 있으면를 완전히 스크롤 할 때까지 해당 하위 구성 요소가 표시되지 않습니다 Toolbar.

따라서 UI 하단에 버튼을 고정하고 싶을 때 버튼 하단에 CoordinatorLayout( android:layout_gravity="bottom") 버튼을 놓고 버튼 높이와 동일한 하단 여백을 툴바 아래의 뷰에 추가 하여이 문제를 해결했습니다 .


1
정말 고마워요, 정말 작동합니다! 툴바가 이동 된 경우 내 유일한 문제는 Fragment포함 목록을 다른 목록으로 교체 한 후 반환되지 않았습니다 Fragment. 방법으로 툴바를 수동으로 표시했습니다 .
WonderCsabo

와. 나는 항상 Fragment의 자체 레이아웃이 FrameLayout "placeholder"를 완전히 대체한다고 생각했지만 전혀 그렇지 않습니다. 이 답변에 감사드립니다! 그것은 많은 도움이되었습니다.
주목받는 개발자

당신이 할 수있는 경우 @Surendar D이를 확인하시기 바랍니다 stackoverflow.com/questions/42968587/...
모하메드 Rihan

좋은. 감사합니다!
Razvan

87

나는 다음을 추가하여 이것을 고쳤다.

android : layout_marginTop = "? android : attr / actionBarSize"

다음과 같이 FrameLayout에

 <FrameLayout
        android:id="@+id/content"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       />

9
marginTop를 추가하는 대신 app : layout_behavior = "@ string / appbar_scrolling_view_behavior"추가
Naveed Ahmad

3
@ string / appbar_scrolling_view_behavior를 사용할 수없는 경우 완벽한 솔루션
Julius

사용하십시오android:layout_marginTop="?android:attr/actionBarSize"
Martin Pfeffer

6
이것은 다소 해킹 적이며, 크기가 얼마인지 (여기에 항상 해당 크기의 도구 모음이 있다고 가정 할 때) 여백이 추가 될 것입니다.
Kenny

0

Android studio 3.4부터는이 줄을 레이아웃에 배치해야합니다 RecyclerView.

app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"

0

접는 상단 툴바를 사용하거나 자신이 선택한 ScrollFlags를 사용하여 다음과 같이 할 수 있습니다. Material Design 에서 FrameLayout을 제거하십시오.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleGravity="top"
            app:layout_scrollFlags="scroll|enterAlways">


        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin">

            <ImageView
                android:id="@+id/ic_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_arrow_back" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="back"
                android:textSize="16sp"
                android:textStyle="bold" />

        </androidx.appcompat.widget.Toolbar>


        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/post_details_recycler"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="5dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.