คำถามง่าย ๆ แต่ฉันไม่สามารถหาคำตอบได้ ฉันจะยุบหรือขยายCollapsingToolbarLayout
โปรแกรมได้อย่างไร
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
คำถามง่าย ๆ แต่ฉันไม่สามารถหาคำตอบได้ ฉันจะยุบหรือขยายCollapsingToolbarLayout
โปรแกรมได้อย่างไร
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
คำตอบ:
เมื่อใช้ Support Library v23 คุณสามารถโทรappBarLayout.setExpanded(true/false)
ได้
อ่านเพิ่มเติม: AppBarLayout.set ขยาย (บูลีน)
ฉันใช้รหัสนี้เพื่อยุบแถบเครื่องมือ ยังไม่สามารถหาวิธีขยายได้
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: ฟังก์ชั่นเดียวกันกับความเร็วเชิงลบ Y แต่แถบเครื่องมือจะไม่ขยาย 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]);
}
}
จะพยายามใช้ Behavior ด้วยตัวเอง
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
โซลูชัน beter คือการใช้- ( 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 และรับข้อผิดพลาดอย่างฉัน ฉันได้รับ NullPointerException ใน onCreate โดยไม่ต้องบรรทัดนี้
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);
ฉันใช้สิ่งนี้
private fun collapseAppbar() {
scrollView.postDelayed(Runnable {
scrollView?.smoothScrollTo(50, 50)
}, 400)
}
หากต้องการขยาย / ยุบ AppBarLayout โดยทางโปรแกรม:
fun expandAppBarLayout(expand: Boolean, isAnimationEnabled: Boolean){
appBarLayout.setExpanded(expand, isAnimationEnabled);
}