সাধারণ প্রশ্ন, তবে আমি উত্তর খুঁজে পাচ্ছি না। আমি CollapsingToolbarLayoutপ্রোগ্রামেমেটিকভাবে ভেঙে বা প্রসারিত করতে পারি ?

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

সাধারণ প্রশ্ন, তবে আমি উত্তর খুঁজে পাচ্ছি না। আমি CollapsingToolbarLayoutপ্রোগ্রামেমেটিকভাবে ভেঙে বা প্রসারিত করতে পারি ?

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

উত্তর:
সমর্থন লাইব্রেরি v23 ব্যবহার করে, আপনি কল করতে পারেন appBarLayout.setExpanded(true/false)।
আরও পড়ুন: AppBarLayout.setE Expanded (বুলিয়ান)
আমি এই কোডটি সরঞ্জামদণ্ডকে সঙ্কুচিত করার জন্য ব্যবহার করি। এখনও এটি প্রসারিত করার কোনও উপায় খুঁজে পাচ্ছে না।
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]);
}
}
নিজের দ্বারা আচরণ বাস্তবায়নের চেষ্টা করব Will
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)টুলবার পতন।
আপনি যদি কল্যাপসিংটুলআরআউট উচ্চতাটিকে প্রোগ্রামক্রমে পরিবর্তন করতে চান তবে কেবল ব্যবহার করুন 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);
যারা নেস্টপ্রেসক্রোল নিয়ে কাজ করতে চান এবং আমার মতো ত্রুটি পেতে চান তাদের জন্য। আমি এই রেখার সাথে অনক্রিটে নালপয়েন্টারএক্সসেপশন পেয়েছি
CoordinatorLayout coordinator =(CoordinatorLayout)findViewById(R.id.tab_maincontent);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
//below line
params.setBehavior(new AppBarLayout.Behavior() {});
এবং এটি দিয়ে সঠিকভাবে কাজ করে না। তবে আমি এই সমস্যাটি নিয়ে কাজ করি
অনক্রিটেতে:
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);