Android Lollipop 툴바 : 스크롤하는 동안 툴바를 숨기거나 표시하는 방법은 무엇입니까?
appcompat / support-v7에 도입 된 새로운 도구 모음 위젯을 사용하고 있습니다. 새로운 Google의 playstore 앱이나 NewsStand 앱에서와 같이 사용자가 페이지를 위 / 아래로 스크롤하는지 여부에 따라 툴바를 숨기거나 표시하고 싶습니다. 이를 위해 툴바 위젯에 내장 된 것이 있습니까? 아니면 FrameLayout 및 ObservableScrollView와 함께 사용해야합니까?
내가 아는 한 당신을 위해 이것을하는 빌드는 없습니다. 그러나 Google IO 소스 코드, 특히 BaseActivity를 볼 수 있습니다. "자동 숨기기"를 검색하거나onMainContentScrolled
Toolbar
당신의 수 를 숨기려면 다음과 같이하십시오.
toolbar.animate().translationY(-toolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
다시 표시하려면 다음으로 전화하십시오.
toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();
툴바를 숨기려면 다음을 수행하십시오.
getSupportActionBar().hide();
따라서 스크롤 리스너를 가지고 사용자가 스크롤 할 때 툴바를 숨기면됩니다!
숨는 장소:
getSupportActionBar().hide();
보여 주다:
getSupportActionBar().show();
대답은 간단합니다. OnScrollListener
리스너에서 툴바를 구현 하고 숨기거나 표시하십시오. 예를 들어, listview / recyclerview / gridview가있는 경우 예제를 따르십시오.
당신에 MainActivity Oncreate
방법, 도구 모음을 초기화합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
그런 다음 OnScrollListener
public RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
boolean hideToolBar = false;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (hideToolBar) {
((ActionBarActivity)getActivity()).getSupportActionBar().hide();
} else {
((ActionBarActivity)getActivity()).getSupportActionBar().show();
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 20) {
hideToolBar = true;
} else if (dy < -5) {
hideToolBar = false;
}
}
};
https://stackoverflow.com/a/27063901/1079773 에서 아이디어를 얻었습니다.
Android 디자인 지원 라이브러리를 사용하여 도구 모음을 표시하거나 숨길 수 있습니다.
이것 좀 봐. http://android-developers.blogspot.kr/2015/05/android-design-support-library.html
여기에 세부 샘플이 있습니다. http://inthecheesefactory.com/blog/android-design-support-library-codelab/en
실제로 콘텐츠를 스크롤하는 동안 도구 모음을 숨기거나 표시하는 방법에는 여러 가지가 있습니다. 방법 중 하나는 Android 디자인 지원 라이브러리 또는 좀 더 구체적으로 코디네이터 레이아웃 (일명)을 통해 수행하는 것입니다. 강력한 프레임 레이아웃.
기본적으로 레이아웃 파일에 다음과 같은 구조를 유지하기 만하면 원하는 결과를 얻을 수 있습니다.
<CoordinatorLayout>
<AppBarLayout>
</AppBarLayout>
<NestedScrollView>
</NestedScrollView>
</CoordinatorLayout>
실제로 단계별로 어떻게 할 수 있는지 설명하는 비디오를 만들었습니다. 자유롭게 확인하고 도움이되는지 알려주세요. 감사! :)
나는 동일한 동작을 구현하려고 노력해 왔으며 여기에 도구 모음을 표시하고 숨기는 코드가 있습니다 (RecyclerView를 포함하는 클래스에 넣습니다).
int toolbarMarginOffset = 0
private int dp(int inPixels){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, inPixels, getApplicationContext().getResources().getDisplayMetrics());
}
public RecyclerView.OnScrollListener onScrollListenerToolbarHide = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
toolbarMarginOffset += dy;
if(toolbarMarginOffset>dp(48)){
toolbarMarginOffset = dp(48);
}
if(toolbarMarginOffset<0){
toolbarMarginOffset = 0;
}
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)toolbar.getLayoutParams();
params.topMargin = -1*toolbarMarginOffset;
toolbar.setLayoutParams(params);
}
};
I've included the dp function to convert from pixels to dp but obviously set it to whatever your toolbar height is. (replace dp(48) with your toolbar height)
Where-ever you setup your RecyclerView include this:
yourListView.setOnScrollListener(onScrollListenerToolbarHide);
However, there are a couple additional issues if you are also using a SwipeRefreshLayout.
I've had to set the marginTop of the first element in the adapter for the RecyclerView to the Toolbar's height plus original offset. (A bit of a hack I know). The reason for this is I found that if I changed my above code to include changing the marginTop of the recyclerView while scrolling it was a jittery experience. So that's how I overcame it. So basically setup your layout so that your toolbar is floating on top of the RecyclerView (clipping it) Something like this (in onBindViewHolder of your custom RecyclerView adapter) :
if(position==0){
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)holder.card.getLayoutParams();
// params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
params.topMargin = dp(10+48);
}
And lastly, since there is a large offset the RecyclerViews refresh circle will be clipped, so you'll need to offset it (back in onCreate of your class holding your RecyclerView):
swipeLayout.setProgressViewOffset(true,dp(48),dp(96));
I hope this helps someone. Its my first detailed answer so I hope I was detailed enough.
To hide the menu for a particular fragment:
setHasOptionsMenu(true); //Inside of onCreate in FRAGMENT:
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_search).setVisible(false);
}
Just add this property inside your toolbar and its done
app:layout_scrollFlags="scroll|enterAlways"
Isn't is awesome
I implemented a utility class to do the whole hide/show Toolbar animation when scrolling. You can see the article here http://rylexr.tinbytes.com/2015/04/27/how-to-hideshow-android-toolbar-when-scrolling-google-play-musics-behavior/. Source code is here https://github.com/rylexr/android-show-hide-toolbar.
A library and demo with the complete source code for scrolling toolbars or any type of header can be downloaded here:
https://github.com/JohannBlake/JBHeaderScroll
Headers can be Toolbars, LinearLayouts, RelativeLayouts, or whatever type of view you use to create a header.
The scrollable area can be any type of scroll content including ListView, ScrollView, WebView, RecyclerView, RelativeLayout, LinearLayout or whatever you want.
There's even support for nested headers.
It is indeed a complex undertaking to synchronize headers (toolbars) and scrollable content the way it's done in Google Newsstand.
This library doesn't require implementing any kind of onScrollListener.
The solutions listed above by others are only half baked solutions that don't take into consideration that the top edge of the scrollable content area beneath the toolbar has to initially be aligned to the bottom edge of the toolbar and then during scrolling the content area needs to be repositioned and possibly resized. The JBHeaderScroll handles all these issues.
There is an Android library called Android Design Support Library that's a handy library where you can find of all of those Material fancy design things that the Material documentation presents without telling you how to do them.
It's well presented in this Android Blog post. The "Collapsing Toolbar" in particular is what you're looking for.
ReferenceURL : https://stackoverflow.com/questions/26539623/android-lollipop-toolbar-how-to-hide-show-the-toolbar-while-scrolling
'IT박스' 카테고리의 다른 글
JavaScript는 객체 지향입니까? (0) | 2021.01.05 |
---|---|
Mac OS X에서 디렉토리 하드 링크 만들기 (0) | 2021.01.05 |
Android Studio : 드로어 블 폴더 : 여러 dpi에 이미지를 넣는 방법? (0) | 2021.01.05 |
Javascript PascalCase를 underscore_case로 변환 (0) | 2021.01.05 |
ASP.NET Core의 OAuth 권한 부여 서비스 (0) | 2020.12.31 |