Câu hỏi đơn giản, nhưng tôi không thể tìm thấy câu trả lời. Làm thế nào tôi có thể thu gọn hoặc mở rộng CollapsingToolbarLayout
chương trình?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Câu hỏi đơn giản, nhưng tôi không thể tìm thấy câu trả lời. Làm thế nào tôi có thể thu gọn hoặc mở rộng CollapsingToolbarLayout
chương trình?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Câu trả lời:
Sử dụng Thư viện hỗ trợ v23, bạn có thể gọi appBarLayout.setExpanded(true/false)
.
Đọc thêm: AppBarLayout.setExpanded (boolean)
Tôi sử dụng mã này để thu gọn thanh công cụ. Vẫn không thể tìm ra cách để mở rộng nó.
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);
}
}
Chỉnh sửa 1: Chức năng tương tự với vận tốc âmY nhưng thanh công cụ không được mở rộng 100% và sai cho tham số cuối cùng sẽ hoạt động
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);
}
}
Chỉnh sửa 2: Mã này thực hiện thủ thuật cho tôi
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]);
}
}
Sẽ cố gắng tự mình thực hiện Hành vi.
onNestedFling
để false
.
onNestedFling
trước khi đặt đoạn đó. Sau khi thiết lập đoạn, tôi có thể gọi phương thức thành công.
Bạn có thể xác định mức độ mở rộng hoặc thu gọn với trình hoạt hình tùy chỉnh của mình. Chỉ cần sử dụng setTopAndBottomOffset(int)
.
Đây là một ví dụ:
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 )
để đặt valueAnimator.setIntValues
Giải pháp beter là sử dụng- ( appBar.getTotalScrollRange() )
Tôi đã viết một phần mở rộng nhỏ cho AppBarLayout
. Nó cho phép mở rộng và thu gọn CollapsibleToolbarLayout
cả hai có và không có hình ảnh động. Nó dường như được làm điều đó hoàn toàn đúng.
Cảm thấy thật thanh thản khi từ bỏ.
Chỉ cần sử dụng nó thay vì của bạn AppBarLayout
và bạn có thể gọi các phương thức chịu trách nhiệm mở rộng hoặc thu gọn CollapsingToolbarLayout
.
Nó hoạt động chính xác như mong đợi trong dự án của tôi, nhưng bạn có thể cần phải điều chỉnh các giá trị fling / scroll trong các perform...
phương thức (đặc biệt là trong performExpandingWithAnimation()
) để phù hợp hoàn hảo với của bạn CollapsibleToolbarLayout
.
setExpanded
phương thức trong AppBarLayout
.
Sử dụng mAppBarLayout.setExpanded(true)
để mở rộng Thanh công cụ và sử dụng mAppBarLayout.setExpanded(false)
để thu gọn Thanh công cụ.
Nếu bạn muốn thay đổi chiều cao CollapsingToolbarLayout theo chương trình thì chỉ cần sử dụng mAppBarLayout.setLayoutParams(params)
;
Mở rộng:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*200; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(true);
Sự sụp đổ:
CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*80; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(false);
cho những người muốn làm việc với onNestedPreScroll và gặp lỗi như tôi. tôi nhận được NullPulumException trong onCreate với dòng này
CoordinatorLayout coordinator =(CoordinatorLayout)findViewById(R.id.tab_maincontent);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
//below line
params.setBehavior(new AppBarLayout.Behavior() {});
và không hoạt động đúng với điều này. nhưng tôi giải quyết vấn đề này với
trong onCreate:
scrollToolbarOnDelay();
và ...
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);
}
Thử cái này...
Mở rộng
appBarLayout.setExpanded(true, true);
Để thu hồi
appBarLayout.setExpanded(false, true);
Điều này có thể giúp mở rộng hoặc sụp đổ:
appBarLayout.setActivated(true);
appBarLayout.setExpanded(true, true);