आसान सवाल है, लेकिन मुझे कोई जवाब नहीं मिल रहा है। मैं CollapsingToolbarLayout
प्रोग्राम को कैसे ध्वस्त या विस्तारित कर सकता हूं ?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
आसान सवाल है, लेकिन मुझे कोई जवाब नहीं मिल रहा है। मैं CollapsingToolbarLayout
प्रोग्राम को कैसे ध्वस्त या विस्तारित कर सकता हूं ?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
जवाबों:
समर्थन लाइब्रेरी v23 का उपयोग करके, आप कॉल कर सकते हैं appBarLayout.setExpanded(true/false)
।
आगे पढ़ने: AppBarLayout.setExpanded (बूलियन)
मैं टूलबार को ढहाने के लिए इस कोड का उपयोग करता हूं। अभी भी इसे विस्तारित करने का कोई तरीका नहीं मिल रहा है।
public void collapseToolbar(){
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null) {
behavior.onNestedFling(rootLayout, appbarLayout, null, 0, 10000, true);
}
}
संपादित 1: नकारात्मक वेग के साथ एक ही कार्य लेकिन टूलबार का विस्तार 100% नहीं है और अंतिम परम के लिए गलत काम करना चाहिए
public void expandToolbar(){
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null) {
behavior.onNestedFling(rootLayout, appbarLayout, null, 0, -10000, false);
}
}
संपादन 2: यह कोड मेरे लिए ट्रिक करता है
public void expandToolbar(){
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null) {
behavior.setTopAndBottomOffset(0);
behavior.onNestedPreScroll(rootLayout, appbarLayout, null, 0, 1, new int[2]);
}
}
खुद से व्यवहार को लागू करने की कोशिश करेंगे।
onNestedFling
करने के लिए false
।
onNestedFling
से पहले कॉल करने की कोशिश की । टुकड़ा सेट करने के बाद, मैं विधि को सफलतापूर्वक कॉल कर सकता था।
आप परिभाषित कर सकते हैं कि यह आपके कस्टम एनिमेटर के साथ कितना फैलता है या ढह जाता है। बस का उपयोग करें setTopAndBottomOffset(int)
।
यहाँ एक उदाहरण है:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBar.getLayoutParams();
final AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
ValueAnimator valueAnimator = ValueAnimator.ofInt();
valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
behavior.setTopAndBottomOffset((Integer) animation.getAnimatedValue());
appBar.requestLayout();
}
});
valueAnimator.setIntValues(0, -900);
valueAnimator.setDuration(400);
valueAnimator.start();
}
( -900 )
valueAnimator.setIntValues
- ( appBar.getTotalScrollRange() )
मैंने एक छोटा सा विस्तार लिखा है AppBarLayout
। यह CollapsibleToolbarLayout
एनीमेशन के साथ और बिना दोनों के विस्तार और पतन की अनुमति देता है । ऐसा लगता है कि यह काफी सही है।
इसे ट्राय करने के लिए स्वतंत्र महसूस करें।
बस अपने के बजाय इसका इस्तेमाल करते हैं AppBarLayout
, और आप के विस्तार या पतन के लिए जिम्मेदार तरीके कह सकते हैं CollapsingToolbarLayout
।
यह मेरी परियोजना में बिल्कुल अपेक्षित रूप से काम कर रहा है, लेकिन आपको अपने लिए पूरी तरह से फिट होने के लिए perform...
तरीकों (विशेष रूप से performExpandingWithAnimation()
) में फ़्लिंग / स्क्रॉल मूल्यों को ट्विक करने की आवश्यकता हो सकती है CollapsibleToolbarLayout
।
setExpanded
विधि है AppBarLayout
।
mAppBarLayout.setExpanded(true)
टूलबार का विस्तार करने के लिए उपयोग करें और टूलबार mAppBarLayout.setExpanded(false)
को संक्षिप्त करने के लिए उपयोग करें।
यदि आप CollapsingToolbarLayout ऊंचाई को प्रोग्रामेटिक रूप से बदलना चाहते हैं तो बस उपयोग करें mAppBarLayout.setLayoutParams(params)
;
विस्तार:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*200; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(true);
ढहने:
CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*80; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(false);
उन लोगों के लिए जो onNestedPreScroll के साथ काम करना चाहते हैं और मेरी तरह त्रुटि प्राप्त करते हैं। मैं इस लाइन के साथ onCreate में NullPointerException प्राप्त करता हूं
CoordinatorLayout coordinator =(CoordinatorLayout)findViewById(R.id.tab_maincontent);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
//below line
params.setBehavior(new AppBarLayout.Behavior() {});
और इसके साथ ठीक से काम नहीं करता है। लेकिन मैं इस समस्या के साथ काम करते हैं
onCreate में:
scrollToolbarOnDelay();
तथा...
public void scrollToolbarOnDelay() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.tab_appbar);
CoordinatorLayout coordinator = (CoordinatorLayout) findViewById(R.id.tab_maincontent);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null)
behavior.onNestedPreScroll(coordinator, appBarLayout, null, 0, 100, new int[]{0, 0});
else
scrollToolbarOnDelay()
}
}, 100);
}
इसे इस्तेमाल करे...
विस्तार
appBarLayout.setExpanded(true, true);
याद करना
appBarLayout.setExpanded(false, true);
यह विस्तार या पतन करने में मदद कर सकता है:
appBarLayout.setActivated(true);
appBarLayout.setExpanded(true, true);