23

मेरे पास एक पुनर्नवीनीकरण के साथ एक समन्वयक लेआउट है जिसे मैं प्रोग्रामेटिक रूप से जोड़ना चाहता हूं। प्रोग्रामेटिक रूप से इसे जोड़ा जाने का कारण यह है कि समन्वयक लेआउट को भरने वाले विभिन्न टुकड़े विभिन्न प्रकार के रीसाइक्लिंगव्यू का उपयोग कर सकते हैं।ऐप सेट करना: layout_behavior प्रोग्रामेटिक रूप से

आम तौर पर एक recyclerview के लिए, इस व्यवहार सेट करने के लिए मैं यह xml में जोड़ना होगा:

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

यह ठीक काम करता है। हालांकि, मैं जब मैं recyclerviews प्रोग्राम के रूप में बनाने के लिए कैसे इस व्यवहार को जोड़ने और फिर उन्हें framelayout में जोड़ने के लिए करने के लिए के रूप में एक पूरा नुकसान में हूँ:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.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:layout_width="match_parent" 
    android:id="@+id/coordLayout" 
    android:layout_height="match_parent" android:fitsSystemWindows="true" 
    tools:context=".MainActivity"> 

    <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" 
     android:fitsSystemWindows="true" android:layout_height="@dimen/app_bar_height" 
     android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout" 
      android:fitsSystemWindows="true" android:layout_width="match_parent" 
      android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:contentScrim="?attr/colorPrimary"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_height="?attr/actionBarSize" 
       android:layout_width="match_parent" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

    </android.support.design.widget.AppBarLayout> 
    <FrameLayout 
     android:id="@+id/frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

    </FrameLayout> 

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

उत्तर

59

BehaviorCoordinatorLayout.LayoutParams की एक पैरामीटर है। आप व्यवहार को CoordinatorLayout.LayoutParams के उदाहरण पर setBehavior विधि के साथ सेट कर सकते हैं।

उचित Behavior ऑब्जेक्ट प्राप्त करने के लिए जो @string/appbar_scrolling_view_behavior जैसा ही प्रतिनिधित्व करता है आपको AppBarLayout.ScrollingViewBehavior का उदाहरण बनाना चाहिए।


संपादित करें 1:

मैं वास्तव में एक उदाहरण की जरूरत नहीं है, लेकिन मैं हो सकता है आप एक लिख सकते हैं। मान लें कि आपके पास View है (उदा। yourView) जो पहले से ही CoordinatorLayout से जुड़ा हुआ है (इसलिए इसमें पहले से ही LayoutParams है)।

CoordinatorLayout.LayoutParams params = 
          (CoordinatorLayout.LayoutParams) yourView.getLayoutParams(); 
params.setBehavior(new AppBarLayout.ScrollingViewBehavior()); 
yourView.requestLayout(); 

आपको उस छोटे से ट्विक करने की आवश्यकता हो सकती है (मैंने इसका परीक्षण नहीं किया है, लेकिन इसे काम करना चाहिए)।


संपादित करें 2:

बस एक छोटा सा त्याग क्योंकि हर कोई पूरी तरह से उदाहरण से समझने के लिए लग रहे हैं।

yourView उपरोक्त उदाहरण में उल्लिखित उदाहरण CoordinatorLayout स्वयं ही है। yourViewCoordinatorLayout's बच्चे View है।

+1

क्या आपके पास एक उदाहरण है जहां यह प्रोग्रामेटिक रूप से किया जाता है? – AndroidP

+0

मेरे संपादन को देखने के लिए स्वतंत्र महसूस करें –

+0

बहुत बहुत धन्यवाद। – AndroidP

1

स्वीकृत उत्तर सही है लेकिन प्रदान किया गया कोड संकलित नहीं है। तो यहाँ एक पूरा उदाहरण

CoordinatorLayout.LayoutParams params = 
         (CoordinatorLayout.LayoutParams) view.getLayoutParams(); 

params.setBehavior (नई AppBarLayout.ScrollingViewBehavior (view.getContext(), नल)) है;

दूसरा पैरा AttributeSet है और इसे null के रूप में रखना ठीक है हालांकि इसे समर्थन lib में Nullable के रूप में चिह्नित नहीं किया गया है।

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