축소 도구막대 배치를 프로그래밍 방식으로 축소 또는 확장
간단한 질문인데 답을 찾을 수가 없네요.어떻게 하면 내가 그들을 붕괴시키거나 확장할 수 있습니까?CollapsingToolbarLayout
계획적으로?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
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
'programing' 카테고리의 다른 글
다중 태그 도커 이미지 만들기 (0) | 2023.09.09 |
---|---|
django test client는 url에 액세스할 때 301개의 리디렉션을 받습니다. (0) | 2023.09.09 |
안드로이드 1.6: "android.view.WindowManager $BadToken 예외:창을 추가할 수 없습니다. 토큰 null은 응용 프로그램을 위한 것이 아닙니다." (0) | 2023.09.09 |
Swift에서 실패 가능한 초기화를 구현하는 모범 사례 (0) | 2023.09.09 |
Oracle: 트리거 실행을 위한 한 열의 업데이트 제외 (0) | 2023.09.09 |