2016-03-01 7 views
8

स्क्रॉल जब मैं गूगल मैप्स में Android एप्लिकेशन की तरह एक खोज पट्टी को लागू करने का प्रयास करें:एंड्रॉयड उपकरण पट्टी ऊंचाई

enter image description here

जब recycler दृश्य अपनी प्रारंभिक अवस्था में है, उपकरण पट्टी कोई ऊंचाई है। केवल जब उपयोगकर्ता स्क्रॉलिंग शुरू करना शुरू करते हैं तो दृश्य दिखाई देता है। और खोज बार (टूलबार) कभी गिर नहीं जाता है।

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     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.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="64dp"> 

      <!-- content --> 

     </android.support.v7.widget.Toolbar> 

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

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

और यहाँ आप परिणाम देख सकते हैं: यहाँ मैं इस दोहराने की कोशिश की है

enter image description here

तो मेरी समाधान के साथ समस्या यह है कि उपकरण पट्टी की ऊंचाई हमेशा दिखाई है । लेकिन मैं इसे तब दिखाना चाहता हूं जब रीसाइक्लिंग इसके पीछे स्क्रॉल करता है। क्या डिज़ाइन समर्थन लाइब्रेरी से कुछ भी है जो Google मानचित्र ऐप में दिखाई देने वाले व्यवहार को सक्षम बनाता है?

मैं

com.android.support:appcompat-v7:23.2.0 
com.android.support:design:23.2.0 
+0

क्या आपने CollapsingToolbarLayout का उपयोग करने का प्रयास किया है? –

उत्तर

13

आप एक CoordinatorLayout या नहीं का उपयोग कर रहे हैं, एक RecyclerView.OnScrollListener सही तरीके के रूप में पदोन्नति का संबंध है जहाँ तक जाने के लिए की तरह लगता है। हालांकि, मेरे अनुभव से recyclerview.getChild(0).getTop() विश्वसनीय नहीं है और स्क्रॉलिंग स्थिति निर्धारित करने के लिए उपयोग नहीं किया जाना चाहिए। इसके बजाय, यह क्या काम कर रहा है है:

private static final int SCROLL_DIRECTION_UP = -1; 
// ... 
// Put this into your RecyclerView.OnScrollListener > onScrolled() method 
if (recyclerview.canScrollVertically(SCROLL_DIRECTION_UP) { 
    // Remove elevation 
} else { 
    // Show elevation 
} 

आवंटित करने के लिए सुनिश्चित करें एक LayoutManager अपने RecyclerView या canScrollVertically की कॉल एक दुर्घटना का कारण हो सकता है!

+1

@DanielVehelmann आपको धन्यवाद कि पूरी तरह से मेरी समस्या हल करता है। –

3

उपयोग कर रहा हूँ मैं अपने टुकड़ा में एक RecyclerView है। मैं नीचे दिए गए कोड का उपयोग कर समान प्रभाव प्राप्त कर सकता हूं:

यह सबसे स्मार्ट तरीका नहीं है और आप बेहतर उत्तरों की प्रतीक्षा कर सकते हैं।

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    // Initial Elevation 
    final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
    if(toolbar!= null) 
     toolbar.setElevation(0); 

    // get initial position 
    final int initialTopPosition = mRecyclerView.getTop(); 

    // Set a listener to scroll view 
    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 

      if(toolbar!= null && mRecyclerView.getChildAt(0).getTop() < initialTopPosition) { 
       toolbar.setElevation(50); 
      } else { 
       toolbar.setElevation(0); 
      } 
     } 
    }); 
} 
+0

अच्छा लग रहा है, धन्यवाद। आपको लगता है कि यह सिर्फ एक्सएमएल के साथ संभव नहीं है? –

+0

मुझे लगता है कि यह केवल एक्सएमएल द्वारा संभव नहीं है .. टूलबार के लिए डिफ़ॉल्टबायवीर ऊंचाई से संबंधित नहीं है (लेकिन इसकी ऊंचाई तक)। यहां तक ​​कि यदि आपको कोऑर्डिनेटरलाइट का उपयोग करने का कोई तरीका मिल गया है, तो मुझे लगता है कि आपको कुछ कोड की आवश्यकता होगी ... मैं केवल कोऑर्डिनेटर लेआउट का उपयोग करके एक ही प्रभाव प्राप्त करने की कोशिश करूंगा .. जितनी जल्दी हो सके मैं साझा करूंगा – W0rmH0le

+0

लगभग सही, 'canScrollVertically' क्या है आप अपने ऑनस्क्रॉल लिस्टर के भीतर खोज रहे हैं (मेरा जवाब देखें)। इसके अलावा, addOnScrollListener() को कॉल करने से पहले 'टूलबार == नल'' वापस लौटने पर, आपके कोड को थोड़ा बेहतर IMHO बना देगा। –

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