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>

मैं उनके स्थान पर Fragments जोड़ता 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"/>

यहाँ मेरी समस्या यह है कि टूलबार सूची में शामिल है । मैंने उस की सामग्री को एक CoordinatorLayoutमें लपेटकर हल करने की कोशिश की LinearLayout, जिसमें ओवरड्रॉल को हल किया, लेकिन इस तरह से ऐपबार स्क्रॉलिंग व्यवहार अब काम नहीं करता है।

किसी भी प्रकार की मदद की बेहद सराहना की जाती है!

जवाबों:


355

गुण को लें

app:layout_behavior="@string/appbar_scrolling_view_behavior"

बंद करें RecyclerViewऔर इसे उस पर रखें FrameLayoutजिसे आप नीचे दिखाने की कोशिश कर रहे हैं Toolbar

मैंने पाया है कि एक महत्वपूर्ण बात यह है कि स्क्रॉलिंग व्यू व्यवहार टूलबार के नीचे के घटक को लेआउट करता है। क्योंकि FrameLayoutएक वंशज है जो स्क्रॉल करेगा ( RecyclerView), को CoordinatorLayoutआगे बढ़ने के लिए स्क्रॉलिंग इवेंट मिलेंगे Toolbar


एक अन्य बात जो अवगत होना चाहिए: उस लेआउट व्यवहार के कारण FrameLayoutऊंचाई का आकार होगा जैसे कि Toolbarपहले से ही स्क्रॉल किया गया है , और Toolbarपूरी तरह से प्रदर्शित होने के साथ पूरे दृश्य को बस नीचे धकेल दिया जाता है ताकि दृश्य का तल नीचे से नीचे हो CoordinatorLayout

यह मेरे लिए आश्चर्य की बात थी। मैं उम्मीद कर रहा था कि टूलबार को ऊपर और नीचे स्क्रॉल करने पर दृश्य गतिशील रूप से आकार बदला जा सकता है। इसलिए यदि आपके पास अपने दृश्य के तल पर एक निश्चित घटक के साथ एक स्क्रॉलिंग घटक है, तो आप उस घटक को तब तक नहीं देखेंगे जब तक कि आप पूरी तरह से स्क्रॉल नहीं कर लेते Toolbar

इसलिए जब मैं UI के नीचे एक बटन को एंकर करना चाहता था, तो मैंने इसके चारों ओर CoordinatorLayout( android:layout_gravity="bottom") के नीचे बटन लगाकर और टूलबार के नीचे दृश्य की ऊंचाई के बराबर बटन जोड़कर इस पर काम किया ।


1
बहुत बहुत धन्यवाद, यह वास्तव में काम करता है! उसके बाद मेरी एकमात्र समस्या यह है कि अगर टूलबार को बाहर कर दिया गया था, तो यह Fragmentकिसी अन्य के साथ सूची के साथ युक्त को बदलने के बाद वापस नहीं आया Fragment। मैं इस तरह से टूलबार को मैन्युअल रूप से दिखाने में कामयाब रहा ।
वंडरकसैबो

वाह। मैंने हमेशा सोचा था कि फ्रेगमेंट का अपना लेआउट पूरी तरह से फ्रेमलैट "प्लेसहोल्डर" से बदल गया है, लेकिन मुझे लगता है कि ऐसा बिल्कुल नहीं है। इस उत्तर के लिए धन्यवाद! इसने मेरी बहुत मदद की।
आकांक्षा देव

@ सुरेंद्र डी कृपया इसे देखें अगर आप stackoverflow.com/questions/42968587/…
मोहम्मद

अच्छा लगा। धन्यवाद!
रजवान

87

मैंने इसे जोड़कर इसे ठीक किया:

एंड्रॉयड: layout_marginTop = "एंड्रॉयड: attr / actionBarSize"

इस तरह फ्रेमवर्क के लिए:

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

9
मार्जिन जोड़ने के बजाय ऐप जोड़ें: लेआउट_बेहवियर = "@ स्ट्रिंग / appbar_scrolling_view_behavior"
नावेद अहमद

3
परफेक्ट सॉल्यूशन जब @ string / appbar_scrolling_view_behavior उपलब्ध नहीं है
जूलियस

कृपया उपयोग करेंandroid:layout_marginTop="?android:attr/actionBarSize"
मार्टिन फ़ेफ़र

6
यह थोड़े हैकी है, जो कि आकार का एक मार्जिन जोड़ सकता है (मान लें कि आपके पास हमेशा एक टूलबार होगा जिसका आकार) किसी बिंदु पर टूटने वाला है
केनी

0

एंड्रॉइड स्टूडियो 3.4 के रूप में, आपको इस लाइन को अपने लेआउट में रखना होगा जो रखती है RecyclerView

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

0

टूलबार को समाप्‍त करने के लिए या अपनी पसंद के स्‍क्रॉलफ्लैग का उपयोग करने के लिए हम इस तरह से कर सकते हैं: मैटीरियल डिज़ाइन से फ्रेम लॉयआउट से छुटकारा पाएं

<?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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.