프로그래밍 방식으로 축소 또는 축소 축소 도구 모음 레이아웃
간단한 질문이지만 답을 찾을 수 없습니다. CollapsingToolbarLayout
프로그래밍 방식으로 축소하거나 확장하려면 어떻게해야합니까?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Support Library v23을 사용하여 전화를 걸 수 있습니다 appBarLayout.setExpanded(true/false)
.
추가 읽기 : AppBarLayout.setExpanded (boolean)
툴바 축소에이 코드를 사용합니다. 여전히 확장 방법을 찾을 수 없습니다.
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은 툴바를 확장합니다
- onNestedPreScroll은 확장 도구 모음 안에 내용을 표시합니다
혼자서 행동을 구현하려고합니다.
You can define how much it expands or collapses with your custom animator. Just use the setTopAndBottomOffset(int)
.
Here is an example:
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();
}
I've written a small extension to AppBarLayout
. It allows for expanding and collapsing of the CollapsibleToolbarLayout
both with and without animation. It seems to be doing it quite right.
Just use it instead of your AppBarLayout
, and you can call methods responsible for expanding or collapsing of the CollapsingToolbarLayout
.
It's working exactly as expected in my project, but you might need to tweak the fling/scroll values in the perform...
methods (especially in performExpandingWithAnimation()
) to fit perfectly with your CollapsibleToolbarLayout
.
for the ones who wants to work with onNestedPreScroll and get error like me. i get NullPointerException in onCreate with out this line
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);
}
사용 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);
확장 또는 축소하는 데 도움이 될 수 있습니다.
appBarLayout.setActivated(true);
appBarLayout.setExpanded(true, true);
이 시도...
넓히다
appBarLayout.setExpanded(true, true);
회상
appBarLayout.setExpanded(false, true);
나는 이것을 사용하고있다
private fun collapseAppbar() {
scrollView.postDelayed(Runnable {
scrollView?.smoothScrollTo(50, 50)
}, 400)
}
'Programing' 카테고리의 다른 글
ASP.NET MVC에서 View Model을 JSON 객체로 변환하는 방법은 무엇입니까? (0) | 2020.06.10 |
---|---|
Guzzle 6 : 응답을위한 더 이상 json () 메소드 (0) | 2020.06.10 |
Clojure에 목록에 특정 값이 포함되어 있는지 테스트 (0) | 2020.06.09 |
팬더 데이터 프레임의 열을 반복하여 회귀를 실행하는 방법 (0) | 2020.06.09 |
왜 파이썬 3에서 부동 소수점 값 4 * 0.1이 멋지게 보이지만 3 * 0.1은 그렇지 않습니까? (0) | 2020.06.09 |