23

मैं वर्तमान में एंड्रॉयड डिजाइन समर्थन पुस्तकालय से एक CoordinatorLayout में एक FrameLayout के साथ एक समस्या हो रहा है, जबकि मैं इस post से निर्देशों का पालन करते हुए टैब बनाने के साथ CoordinatorLayout में FrameLayout।एंड्रॉयड SupportLib - AppBarLayout लेने वाली पूरे स्क्रीन ऊंचाई

मूल रूप से सबसे चीजें काम की उम्मीद के रूप में, कंटेनर-टुकड़ों में फुलाया जाता है FrameLayout और उनकी टैब-टुकड़े correclty टैब (यह इस तरह से है क्योंकि मैं कई टुकड़े मिल गया है जो लेआउट पुनः उपयोग करना चाहिए की जरूरत है) के रूप में ViewPager से जुड़ जाते हैं ।

समस्या मैं के साथ संघर्ष कर रहा हूँ

कि FrameLayout (और एक परिणाम यह भी टैब-टुकड़े के रूप में) पूरे स्क्रीन ऊंचाई तो यह Toolbar और TabLayout overlaps की खपत है। CoordinatorLayout, Toolbar, और TabLayout साथ

Visualized issue

बेस-लेआउट::

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

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

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

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

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

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

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

अलग टुकड़े फुलाया द्वारा इस्तेमाल किया लेआउट आदेश समस्या कल्पना करने के लिए मैं निम्नलिखित छवि बनाई है container में:

<android.support.v4.view.ViewPager 
    android:id="@+id/viewPager" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

सभी टुकड़े

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(getLayoutRes(), container, false); 
} 

(एसओ बुला inflater.inflate(getLayoutRes(), null); मुद्दा एक ही समस्या पैदा कर रहा था पर एक और पोस्ट पर) मेरी BaseFragment श्रेणी के आधार पर बढ़ाई रहे हैं, तो मैं एक सामान्य LinearLayoutFrameLayout नीचे AppBarLayout शुरू होता है के साथ CoordinatorLayout की जगह जैसा कि अपेक्षित है लेकिन documentationAppBarLayout के अनुसार इसकी अधिकांश सुविधाओं के लिए CoordinatorLayout का प्रत्यक्ष बच्चा होना आवश्यक है।

मैं marginTop को FrameLayout पर जोड़ सकता हूं लेकिन मैं जानना चाहता हूं कि इसके लिए कोई उचित समाधान है या नहीं। किसी भी संकेत के लिए अग्रिम धन्यवाद!

उत्तर

34

app:layout_behavior="@string/appbar_scrolling_view_behavior" को FrameLayout पर ले जाएं - यह विशेषता CoordinatorLayout के प्रत्यक्ष बच्चे पर होनी चाहिए।

+0

यह वही समस्या हल हुई जो मैंने किया था, धन्यवाद, लेकिन मुझे नहीं पता कि क्यों। 'Appbar_scrolling_view_behavior' वास्तव में क्या करता है ..? – Micro

+1

@MicroR - मैं [AppBarLayout.ScrollingViewBehavior [(http://developer.android.com/reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html) के जावाडोक को पढ़ने का सुझाव देता हूं या [स्रोत को देख रहा हूं) कोड] (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/AppBarLayout.java#1128) - यह आवश्यक जोड़ता है 'AppBarLayout' को ओवरलैप न करने के साथ-साथ' AppBarLayout' को स्क्रॉल करने योग्य प्रतिक्रिया (जैसे 'नेस्टेडस्क्रोल व्यू' या 'रीसाइक्लर व्यू') – ianhanniballake

+0

@ianhanniballake पर स्क्रॉल करने का जवाब देने की अनुमति देता है, मैंने आपके सुझाव का उपयोग किया है लेकिन समस्या मुझे मिल रही है मेरे tablayout और framelayout के बीच कुछ अतिरिक्त जगह मैंने कारण का विश्लेषण करने के लिए बीके रंग लागू किया है लेकिन UI – Erum

संबंधित मुद्दे