2015-06-21 9 views
10

द्वारा छुपाए जाने के बाद प्रोग्रामेटिक रूप से टूलबार दिखाएं मेरे पास निम्न लेआउट है: एक ड्रॉवर, जिसमें मुख्य सामग्री दृश्य है, जिसमें ऐपबारलाउट, रीसाइक्लर व्यू और टेक्स्ट व्यू है। जब मैं रीसाइक्लर स्क्रॉल करता हूं, तो टूलबार सही ढंग से छिपा हुआ होता है।स्क्रॉलिंग (एंड्रॉइड डिज़ाइन लाइब्रेरी)

हालांकि, मेरे पास एक उपयोग का मामला है: जब रीसाइक्लिंग से सभी आइटम हटा दिए जाते हैं, तो मैं इसकी दृश्यता 'चला गया' और टेक्स्टव्यू को इसके बजाए उचित संदेश के साथ सेट करता हूं। यदि यह टूलबार छुपाए जाने पर किया जाता है, तो उपयोगकर्ता के लिए टूलबार को फिर से देखना संभव नहीं है।

प्रोग्रामिंग के कारण टूलबार को पूरी तरह से दिखाया जा सकता है? जब भी ReclerView के बजाय टेक्स्ट व्यू दिखाया जाता है तो मैं ऐसा करता हूं।

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    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:animateLayoutChanges="true"> 

    <android.support.design.widget.CoordinatorLayout 
     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"> 

      <Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?android:attr/actionBarSize" 
       app:layout_scrollFlags="scroll|enterAlways"/> 

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

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/test_list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

     <TextView 
      android:id="@+id/empty_test_list_info_label" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" 
      android:padding="@dimen/spacing_big" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:visibility="gone"/> 

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

    <RelativeLayout 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="?android:attr/windowBackground" 
     android:elevation="10dp"/> 

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

Btw, किसी कारण के लिए, अगर मैं RecyclerView के बाद AppBarLayour, डाल के रूप में सभी ट्यूटोरियल यह दिखाने के लिए लगता है, यह सूची से सर्वोच्च आइटम छुपाता है:

यहाँ मेरी लेआउट है। यह केवल ऊपर होने पर सही ढंग से काम करता है।

+0

क्या आपको इसके लिए कोई समाधान मिला? मेरे पास एक ही समस्या है .. –

+0

@GennadiiSaprykin - नहीं, मैंने नहीं किया, क्षमा करें। मुझे लगता है कि अंत में मैंने कुछ अलग किया, लेकिन यह एक लंबा समय रहा है और मुझे नहीं पता कि यह क्या था, और तब से परियोजनाओं को बदल दिया। – wujek

उत्तर

0

यू या तो टूलबार कर सकता है। ट्रांसमिशन वाई (int y); स्क्रॉल विधि पर या दृश्यता का उपयोग करें और आपको टूलबार के आकार के साथ सूची दृश्य या पुनर्चक्रण दृश्य में एक शीर्षलेख जोड़ना होगा। ताकि पूरी सूची अभी भी

+0

टूलबार पर कोई संक्रमण नहीं है। क्या आपका मतलब 'सेट ट्रांसलेशन' था? वैसे भी, यह काम नहीं करता है। – wujek

+0

यहां मैं सूचीदृश्य का उपयोग रीसाइक्लिंगव्यू नहीं करता लेकिन आप इसका एक उदाहरण बना सकते हैं। तो मैंने क्या किया था मैंने एक कस्टम सूचीदृश्य बनाया जो स्क्रॉलिंग के डेल्टा को प्राप्त करता है। (मेरा मानना ​​है कि RecyclerView.OnScrollListener पहले से ही इसे प्रदान करता है मुझे यकीन नहीं है) तो मैं टूलबार का अनुवाद करता हूं। [लिंक] (https://github.com/Jjastiny/ToolbarTranslatingListView) –

0

AppBarLayout की ऊंचाई पर RecyclerView पर शीर्षलेख डालने की आवश्यकता है। I.e RecyclerView की स्थिति 0 पर आपको शीर्षलेख जोड़ने और फिर शेष तत्वों को जोड़ने की आवश्यकता है।

आप जबरदस्ती Toolbar, वास्तव में AppBarLayout offsetting ऊपर और AppBarLayout निर्भर विचारों के नीचे के साथ दिखाना चाहते हैं (यह Behavoir कहा जाता है)। आपको AppBarLayout की ऊंचाई का संदर्भ रखने की आवश्यकता है, क्योंकि हम जानते हैं कि ऊंचाई के बीच Rect के बीच की दूरी है।

यह मानते हुए कि अपने AppBarLayout केवल पकड़ एक Toolbar:

int mAppBarLayoutHeight = mAppBarLayout.getBottom() - mAppBarLayout.getTop(); //initial, normal height 

private void showToolbar(){ 
     if(this.mAnimator == null) { 
      this.mAnimator = new ValueAnimator(); 
      this.mAnimator.setInterpolator(new DecelerateInterpolator()); 
      this.mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
       @Override 
       public void onAnimationUpdate(ValueAnimator animation) { 
       int animatedOffset = (int) animation.getAnimatedValue(); 
       mToolbar.offsetTopBottom(animatedOffset/2); 
       } 
      }); 
     } else { 
      this.mAnimator.cancel(); 
     } 

     this.mAnimator.setIntValues(0, mAppBarLayoutHeight); 
     this.mAnimator.start(); 
    } 
+0

यह काम नहीं करता है। यह संकलित नहीं करता है, या तो - 'mToolbar.offsetTopAndBottom' का उपयोग किया जाना चाहिए। फिर भी, कुछ भी नहीं होता है। – wujek

7

आप AppBarLayout कि अपने टूलबार

यहाँ शामिल करने के लिए तक पहुंच कर यह कर सकते हैं एक उदाहरण है:

if (mToolbar.getParent() instanceof AppBarLayout){ 
    ((AppBarLayout)mToolbar.getParent()).setExpanded(true,true); 
} 

setExpanded (विस्तार, एनीमेशन) काम करेगा। टूलबार से getParent को कॉल करने के बजाय आप AppBarLayout का संदर्भ भी ले सकते हैं।

+0

यह टूलबार के बजाय टैबलाउट के साथ भी काम करता है! – Annihil

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