সাধারণ প্রশ্ন, তবে আমি উত্তর খুঁজে পাচ্ছি না। আমি 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);