답변:
Support Library v23을 사용하여 전화를 걸 수 있습니다 appBarLayout.setExpanded(true/false)
.
툴바 축소에이 코드를 사용합니다. 여전히 확장 방법을 찾을 수 없습니다.
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 % 확장되지 않고 마지막 매개 변수에 대해 false가 작동합니다
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
로 설정하면 편집 1도 작동합니다 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...
메서드 (특히)에서 fling / scroll 값을 조정하여 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);
}