programing

축소 도구막대 배치를 프로그래밍 방식으로 축소 또는 확장

lastcode 2023. 9. 9. 09:32
반응형

축소 도구막대 배치를 프로그래밍 방식으로 축소 또는 확장

간단한 질문인데 답을 찾을 수가 없네요.어떻게 하면 내가 그들을 붕괴시키거나 확장할 수 있습니까?CollapsingToolbarLayout계획적으로?

collapsed toolbar

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

expanded toolbar

Support Library v23을 사용하여 다음을 호출할 수 있습니다.appBarLayout.setExpanded(true/false).

추가 읽기: AppBarLayout.setExpanded(부울)

도구 모음을 접을 때 이 코드를 사용합니다.여전히 확장할 방법을 찾을 수 없습니다.

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]);
    }
}
  • setTopAndBottomOffset 도구 모음 확장
  • NestedPreScroll에서 확장된 도구 모음 안에 내용이 표시됩니다.

스스로 행동을 실천하도록 노력하겠습니다.

사용자 지정 애니메이터를 사용하여 확장하거나 축소하는 정도를 정의할 수 있습니다.그냥.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();
}

에 작은 내선을 써 놓았습니다.AppBarLayout. 확장 및 붕괴를 허용합니다.CollapsibleToolbarLayout애니메이션이 있든 없든.꽤 제대로 하고 있는 것 같습니다.

자유롭게 해보세요.

당신의 것 대신에 그것을 사용하세요.AppBarLayout, 확장 또는 축소에 책임이 있는 메소드를 호출할 수 있습니다.CollapsingToolbarLayout.

제 프로젝트에서 예상했던 대로 정확히 작동하고 있지만, 당신은 그 안에서 플링/스크롤 값을 조정해야 할 수도 있습니다.perform...(특히 에) 방법performExpandingWithAnimation()당신의 것과 완벽하게 들어맞기 위해.CollapsibleToolbarLayout.

사용하다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);

NestedPreScroll로 작업해서 나처럼 오류가 나길 원하는 사람들을 위해 NullPointer를 받습니다.이 줄을 사용하지 않고 만들기

    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을 프로그래밍 방식으로 확장/축소하려면:

fun expandAppBarLayout(expand: Boolean, isAnimationEnabled: Boolean){
    appBarLayout.setExpanded(expand, isAnimationEnabled);
}

이는 확장 또는 축소에 도움이 될 수 있습니다.

appBarLayout.setActivated(true);
appBarLayout.setExpanded(true, true);

이것을 사용하고 있습니다.

 private fun collapseAppbar() {
        scrollView.postDelayed(Runnable {
            scrollView?.smoothScrollTo(50, 50)
        }, 400)
    }

부모가 코디네이터 레이아웃인지 확인해야 합니다. 그렇지 않으면 setExpanded가 작동하지 않습니다.

언급URL : https://stackoverflow.com/questions/30655939/programmatically-collapse-or-expand-collapsingtoolbarlayout

반응형