Nonaktifkan pengguliran bilah alat

Saya memiliki pengaturan saat ini:

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

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.design.widget.NavigationView
        android:layout_width="170dp"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"/>

    <FrameLayout
        // I place a fragment containing a viewpager containing    fragments that contain a recyclerview.... 
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_toRightOf="@+id/nav_view">

    </FrameLayout>
</RelativeLayout>

<FrameLayout
    android:id="@+id/settings_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="invisible">
</FrameLayout>

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_refresh"
    app:layout_anchor="@id/coordiator_layout_in_main"
    app:layout_anchorGravity="bottom|right|end"   
   app:layout_behavior="com.material.widget.MyFloatingActionButtonBehavior" />

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

Sekarang semuanya berfungsi seperti yang diharapkan jika saya menggulir ke dalam framelayout yang berisi fragmen, toolbar meluncur masuk dan keluar sesuai keinginan saya

Sekarang intinya saya ingin menonaktifkan toolbar geser masuk dan keluar jika saya scroll NavView yang ada di samping framelayout (dan di dalam relativelayout)

Tetapi tidak masalah jika saya menghapus semua perilaku pengguliran, bilah alat terus meluncur masuk dan keluar (satu-satunya cara untuk menonaktifkannya adalah menghapus tanda gulir dari tata letak bilah aplikasi, tetapi itu menonaktifkan semua geser masuk dan keluar dari bilah tol)

Tolong apa yang saya lewatkan di sini? Bukankah perilaku scolling seharusnya meneruskan peristiwa gulir ke CoordinatorLayout?




Jawaban (5)


Sayangnya, NavigationView berisi NavigationMenuView yaitu RecyclerView sehingga mendukung pengguliran bersarang dan berpindah AppBarLayout saat digulir. Cara terbaik untuk mengatasi masalah ini adalah dengan memindahkan NavigationView dari CoordinatorLayout. Jika tidak memungkinkan, Anda dapat mencoba kode berikut yang belum saya uji.

final RecyclerView navigationMenuView =
    (RecyclerView) findViewById(R.id.design_navigation_view);
navigationMenuView.setNestedScrollingEnabled(false);

Harap diingat bahwa meskipun kode ini berfungsi, kode ini dapat rusak ketika pustaka Desain diperbarui.

person Michael    schedule 09.04.2016

Pindahkan NavigationView Anda ke dalam DrawerLayout dan CoordinatorLayout ke dalam konten utama DrawerLayout.

Dari dokumen:

NavigationView biasanya ditempatkan di dalam DrawerLayout.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:id="@+id/drawer_layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:fitsSystemWindows="true">

 <!-- Your contents -->

 <android.support.design.widget.NavigationView
     android:id="@+id/navigation"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:layout_gravity="start"
     app:menu="@menu/my_navigation_items" />
 </android.support.v4.widget.DrawerLayout>
person GPack    schedule 10.04.2016

coba ini,

Letakkan Activity_screen.xml ini

<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:fitsSystemWindows="true" tools:openDrawer="start">

    <include layout="@layout/app_bar_screen" android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView android:id="@+id/nav_view"
        android:layout_width="wrap_content" android:layout_height="match_parent"
        android:layout_gravity="start" android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home_screen"
        app:itemIconTint="@color/app_theme_color"
        app:menu="@menu/activity_home_screen_drawer" />

</android.support.v4.widget.DrawerLayout>

Letakkan app_bar_screen.xml ini

 <android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
    tools:context="com.test.app.HomeScreenActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>



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

    <include layout="@layout/content_screen" />


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

Letakkan content_screen.xml ini

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/app_bar_home_screen"
    android:id="@+id/content_frame"
    android:background="@android:color/white"
    tools:context="com.test.app.HomeScreenActivity">


</RelativeLayout>
person Pradeep Gupta    schedule 15.04.2016
comment
Anda harus memberi komentar atau membubuhi keterangan pada kode Anda untuk membantu pemahaman. Kalau tidak, ini hanya akan mengarah pada copy paste pengembang. - person catch22; 16.04.2016
comment
ya benar saya tetapi tidak memberikan jawaban apa pun tanpa tes apa pun. Tapi terima kasih atas saran Anda. - person Pradeep Gupta; 18.04.2016

Hapus baris kodeapp:layout_scrollFlags="scroll|enterAlways" ini dari ToolBar Anda. Berhasil dalam kasus saya.

person Mikhail    schedule 22.09.2017

Bagi siapa pun yang mungkin tertarik, inilah cara saya menangani masalah ini.

Saya membuat NavigationView versi khusus saya dengan menyalin file yang relevan dari sumbernya,

mereka:

  • NavigationView.java
  • NavigasiMenuItem.java
  • NavigationMenuPresente.java
  • NavigationMenuView.java
  • ThemeUtils.java

Perbaiki impor sehingga NavigationView baru mengarah ke file yang baru disalin.

Dan terakhir tambahkan setNestedScrollingEnabled(false) ini ke konstruktor NavigationMenuView.

Hal ini karena, cara @Michael dengan benar menunjukkan bahwa NavigationMenuView adalah RecyclerView, dan dengan demikian ia meneruskan peristiwa penggulirannya ke NestedScrollingParent (CoordinatorLayout), dengan mengatur setNestedScrollingEnabled(false) kita menonaktifkan perilaku ini dan kita mendapatkan hasil yang diinginkan (menggulir NavView tidak tidak perluas/ciutkan AppBar)

person Lisa Anne    schedule 16.04.2016