android - স্ক্রোলটিতে নীচে নেভিগেশনভিউ লুকান/দেখান




android-layout android-fragments (4)

আমাকে উপরে স্ক্রোলের নীচে নেভিগেশন ভিউটি লুকিয়ে রাখতে হবে এবং ডাউন স্ক্রোলটিতে দেখানো হবে thisএটি কীভাবে বাস্তবায়ন করা যায়? আমার লেআউটটি এরকম

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_above="@+id/navigation"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="5dp">

        <FrameLayout
            android:id="@+id/container1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
          />


    </LinearLayout>

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="?android:attr/windowBackground"
        app:layout_scrollFlags="scroll|enterAlways|snap"
        app:menu="@menu/dashboard_slider_menu" />

</RelativeLayout>

আমি দেখার স্ক্রিনশট সংযুক্ত করেছি। দয়া করে এটি পরীক্ষা করুন।


  1. আপনার প্রকল্পটি অ্যান্ড্রয়েডএক্স অর্থাৎ রিফ্যাক্টর >> অ্যান্ড্রয়েডএক্সে স্থানান্তরিত করুন (ন্যূনতম অ্যান্ড্রয়েড স্টুডিও সংস্করণ 3.4)
  2. ডিফল্ট নীচে নেভিগেশন মেনু এক্সএমএল ফাইল ব্যবহার করে অভিভাবক সীমাবদ্ধ লেআউটটিকে সমন্বয়কারী বিন্যাসের সাথে প্রতিস্থাপন করুন।
  3. লাইন অ্যাপ্লিকেশনটি যুক্ত করুন: বিন্যাস_বিচ্যুয়াল = "com.google.android.matory.behavior.HideBottomViewOnScrollBehaviour"

অর্থাত

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.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:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".dashboards.Admin_dashboard_main">

    <include layout="@layout/toolbar" />
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/main_area"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toBottomOf="@+id/toolbar"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_margin="0dp"
        android:padding="0dp">

        <!-- Fragments Container -->
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            tools:context="MainActivity"
            tools:showIn="@layout/activity_tenant_dashboard"
            android:id="@+id/fragment_container">

        </FrameLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>
    <!-- Bottom Navigation View -->

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        android:layout_gravity="bottom"
        app:menu="@menu/menu_admin_dashboard_main"
        app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
        />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

এটা চেষ্টা কর,

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0 && bottom_navigation.isShown()) {
                    bottom_navigation.setVisibility(View.GONE);
                } else if (dy < 0 ) {
                    bottom_navigation.setVisibility(View.VISIBLE);

                }
            }

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

                super.onScrollStateChanged(recyclerView, newState);
            }
        });

স্ক্রোল করার সময় চিত্র: -

স্ক্রোল ডাউন করার সময় চিত্র:


সর্বশেষ গ্রন্থাগারের আপডেটের পরে আপডেট উত্তর:

স্ক্রলিংয়ের BottomNavigationView নেভিগেশনভিউ লুকানো এখন লেআউটে কেবল একটি পতাকা সহ উপলভ্য! 28.0.0-alpha1 সংস্করণ বা উপাদান / androidX 1.0.0-alpha1

সংস্করণটি এখন স্থিতিশীল প্রকাশের প্রার্থী হওয়ায় আমি পরবর্তী প্রকল্পটি ব্যবহার করে আমার প্রকল্প আপডেট করেছি। আপডেট: সম্পূর্ণ প্রকাশিত সংস্করণ "1.0.0" ব্যবহার করুন!

বাক্স উপলভ্য আচরণের নতুন HideBottomViewOnScrollBehavior । সর্বশেষ app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior" বর্ণিত হিসাবে এটি নীচে নেভিগেশনভিউতে app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior" হিসাবে সেট app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"

এখানে একটি সম্পূর্ণ উদাহরণ:

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:labelVisibilityMode="selected"
        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
        android:layout_gravity="bottom"
        app:layout_insetEdge="bottom"
        app:menu="@menu/navigation" />

স্ক্রোলিংয়ের উপর টুলবারটি আড়াল করার সাথে সাথে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে সামগ্রীটি এমন একটি শ্রেণি যা RecyclerView এবং NestedScrollView মতো সর্বশেষতম স্ক্রোলিং সমর্থন করে

এটি নিশ্চিত করে যে সমস্ত নকশা নকশাগুলিতে animation হিসাবে দেখায় কাজ করছে

পিএস: labelVisibilityMode আরেকটি দুর্দান্ত সংযোজন যা আপনি আপডেট করার সমস্যা নেওয়ার জন্য বিনামূল্যে পান এবং এটি labelVisibilityMode গভীরতার সাথে বর্ণনা করা হয়।


হালনাগাদ

সর্বশেষ সমর্থন লাইব্রেরি সংস্করণ 28.0.0 বা higher version আপডেট করুন এবং BottomNavigationView একটি বৈশিষ্ট্য যুক্ত করুন।

<BottomNavigationView
 ....
 ....
 app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"/>

দ্রষ্টব্য : - আপনার XML পুরানো উত্তরে নীচে দেওয়া XML এর কাঠামো অনুসরণ করা উচিত।


পুরানো উত্তর (এখনও কাজ করে)

এটি করার জন্য আপনার কোনও সহায়ক শ্রেণি দরকার his এটি সমাধান গুগল মেটালিয়াল ডিজাইনের গাইডলাইনটির মতো কাজ করে

নীচে নেভিগেশনভিউভিউভিওর একটি ক্লাস তৈরি করুন

public class BottomNavigationViewBehavior extends CoordinatorLayout.Behavior<BottomNavigationView> {

    private int height;

    @Override
    public boolean onLayoutChild(CoordinatorLayout parent, BottomNavigationView child, int layoutDirection) {
        height = child.getHeight();
        return super.onLayoutChild(parent, child, layoutDirection);
    }

    @Override
    public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout,
                                   BottomNavigationView child, @NonNull 
                                   View directTargetChild, @NonNull View target,
                                   int axes, int type)
    {
        return axes == ViewCompat.SCROLL_AXIS_VERTICAL;
    }

    @Override
    public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull BottomNavigationView child,
               @NonNull View target, int dxConsumed, int dyConsumed,
               int dxUnconsumed, int dyUnconsumed, 
                @ViewCompat.NestedScrollType int type)
    {
       if (dyConsumed > 0) {
           slideDown(child);
       } else if (dyConsumed < 0) {
           slideUp(child);
       }
    }

    private void slideUp(BottomNavigationView child) {
        child.clearAnimation();
        child.animate().translationY(0).setDuration(200);
    }

    private void slideDown(BottomNavigationView child) {
        child.clearAnimation();
        child.animate().translationY(height).setDuration(200);
    }
}

এই আচরণটি ব্যবহারের জন্য আপনাকে কুরাদিনেটর লেআউটটি ব্যবহার করা দরকার ...

<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"
    tools:context="com.kliff.digitaldwarka.activity.MainActivity">

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

        <android.support.design.widget.AppBarLayout
            android:id="@+id/myAppBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="beforeDescendants"
            android:focusableInTouchMode="true"
            android:theme="@style/AppTheme.AppBarOverlay"
            app:elevation="0dp">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:contentInsetStart="0dp"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/AppTheme.PopupOverlay"/>
        </android.support.design.widget.AppBarLayout>

        <!---your RecyclerView/Fragment Container Layout-->
        <FrameLayout
             android:id="@+id/container"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             app:layout_behavior="@string/appbar_scrolling_view_behavior" />


         <android.support.design.widget.BottomNavigationView
             android:id="@+id/bottom_nav"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="bottom"
             app:itemBackground="@color/white"
             app:menu="@menu/bottom_nav_menu" />

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

      <!---NavigationView-->
</android.support.v4.widget.DrawerLayout>

এই ক্রিয়াকলাপটি আপনার ক্রিয়াকলাপে যুক্ত করুন যাতে নীচে নেভ রয়েছে ..

mBottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav);
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mBottomNavigationView.getLayoutParams();
    layoutParams.setBehavior(new BottomNavigationViewBehavior());






bottomnavigationview