android 5.0 lollipop - notificaciones - Barra de herramientas de Android lollipop: cómo ocultar/mostrar la barra de herramientas mientras se desplaza?
ocultar botones de navegacion s8 (13)
Android Design Support Library se puede usar para mostrar / ocultar la barra de herramientas.
Mira esto. http://android-developers.blogspot.kr/2015/05/android-design-support-library.html
Y hay ejemplos de detalles aquí. http://inthecheesefactory.com/blog/android-design-support-library-codelab/en
Estoy usando el nuevo widget de barra de herramientas introducido en el appcompat / support-v7. Me gustaría ocultar / mostrar la barra de herramientas dependiendo de si el usuario está desplazándose hacia arriba o hacia abajo en la página, al igual que en la nueva aplicación de tienda de Google o en la aplicación NewsStand. ¿Hay algo incorporado en el widget de la barra de herramientas para esto o debería usarlo junto con FrameLayout y ObservableScrollView?
Aquí puede descargar una biblioteca y una demostración con el código fuente completo para desplazarse por las barras de herramientas o cualquier tipo de encabezado:
https://github.com/JohannBlake/JBHeaderScroll
Los encabezados pueden ser Barras de herramientas, LinearLayouts, RelativeLayouts o cualquier tipo de vista que use para crear un encabezado.
El área desplazable puede ser cualquier tipo de contenido de desplazamiento, incluidos ListView, ScrollView, WebView, RecyclerView, RelativeLayout, LinearLayout o lo que quieras.
Incluso hay soporte para encabezados anidados.
De hecho, es una tarea compleja sincronizar los encabezados (barras de herramientas) y el contenido desplazable tal como se hace en Google Kiosco.
Esta biblioteca no requiere implementar ningún tipo de onScrollListener.
Las soluciones enumeradas anteriormente por otros son solo soluciones a medias que no tienen en cuenta que el borde superior del área de contenido desplazable debajo de la barra de herramientas debe alinearse inicialmente con el borde inferior de la barra de herramientas y luego al desplazarse por las áreas de contenido para ser reubicado y posiblemente redimensionado. El JBHeaderScroll maneja todos estos problemas.
En realidad, hay muchas formas de ocultar / mostrar la barra de herramientas mientras se desplaza por el contenido. Una de las formas es hacerlo a través de la Biblioteca de soporte de diseño de Android o, más específicamente, del diseño Coordinador aka. Diseño de fotograma superpotente.
Básicamente, todo lo que necesita hacer es tener la siguiente estructura en su archivo de diseño y debería poder lograr el resultado que desee.
<CoordinatorLayout>
<AppBarLayout>
</AppBarLayout>
<NestedScrollView>
</NestedScrollView>
</CoordinatorLayout>
De hecho, hice un video para explicar cómo se puede hacer paso a paso. Siéntase libre de consultarlo y avisarme si ayuda. ¡Gracias! :)
Esconder:
getSupportActionBar().hide();
Espectáculo:
getSupportActionBar().show();
Hay una biblioteca de Android llamada Android Design Support Library que es una biblioteca útil donde puedes encontrar todas esas cosas de diseño de materiales de lujo que presenta la documentación Material sin decirle cómo hacerlo.
Está bien presentado en esta publicación del blog de Android . La "Barra de herramientas de colapsar" en particular es lo que estás buscando.
He estado tratando de implementar el mismo comportamiento, aquí está la peor parte del código que muestra y oculta la barra de herramientas (coloque en cualquier clase que contenga su 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);
}
};
He incluido la función dp para convertir de píxeles a dp pero, obviamente, configúralo para cualquier altura de la barra de herramientas. (reemplace dp (48) con la altura de su barra de herramientas)
Donde sea que haya configurado su RecyclerView, incluya esto:
yourListView.setOnScrollListener(onScrollListenerToolbarHide);
Sin embargo, hay un par de problemas adicionales si también está utilizando un SwipeRefreshLayout.
Tuve que establecer el margenTop del primer elemento en el adaptador para el RecyclerView en la altura de la barra de herramientas más el desplazamiento original. (Un poco de un truco lo sé). La razón de esto es que descubrí que si cambiaba el código anterior para incluir el cambio del margen de la vista de reciclador mientras se desplazaba, era una experiencia nerviosa. Así que así es como lo superé. Así que, básicamente, configura tu diseño para que tu barra de herramientas esté flotando encima de RecyclerView (recorte) Algo así (en onBindViewHolder de tu adaptador personalizado RecyclerView):
if(position==0){
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)holder.card.getLayoutParams();
// params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
params.topMargin = dp(10+48);
}
Y, por último, dado que hay un gran desplazamiento, se recortará el círculo de actualización de RecyclerViews, por lo que deberá compensarlo (de nuevo en Crear su clase con su RecyclerView):
swipeLayout.setProgressViewOffset(true,dp(48),dp(96));
Espero que esto ayude a alguien. Es mi primera respuesta detallada, así que espero ser lo suficientemente detallado.
Implementé una clase de utilidad para hacer toda la animación de la barra de herramientas ocultar / mostrar al desplazarme. Puede ver el artículo aquí http://rylexr.tinbytes.com/2015/04/27/how-to-hideshow-android-toolbar-when-scrolling-google-play-musics-behavior/ . El código fuente está aquí https://github.com/rylexr/android-show-hide-toolbar .
La respuesta es simple. Simplemente implemente OnScrollListener
y oculte / muestre su barra de herramientas en el oyente. Por ejemplo, si tiene listview / recyclerview / gridview, entonces siga el ejemplo.
En su método MainActivity Oncreate
, inicialice la barra de herramientas.
@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);
}
}
Y luego implementar 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;
}
}
};
Obtuve la idea de: https://.com/a/27063901/1079773
Para ocultar el menú de un fragmento en particular:
setHasOptionsMenu(true); //Inside of onCreate in FRAGMENT:
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_search).setVisible(false);
}
Para ocultar la barra de herramientas, puede hacer lo siguiente:
getSupportActionBar().hide();
¡Así que solo tienes que tener un escucha de desplazamiento y ocultar la barra de herramientas cuando el usuario se desplaza!
Solo agrega esta propiedad dentro de tu barra de herramientas y está hecho
app:layout_scrollFlags="scroll|enterAlways"
No es genial
La barra de herramientas en Material Design API es como cualquier otra vista utilizada en Android ...
Intenta usar:
toolbar.setVisibility(View.GONE);
esto funcionó para mí
aún no he animado su proceso de ocultación. Bueno, creo que se puede hacer usando una instancia de Animator, como animar una simple Vista
Por lo que yo sé, no hay nada incorporado que haga esto por ti. Sin embargo, podría echarle un vistazo al código fuente de Google IO, especialmente a BaseActivity . Busque "ocultar automáticamente" o consulte onMainContentScrolled
Para ocultar la Toolbar
puede hacer algo como esto:
toolbar.animate().translationY(-toolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
Si quieres volver a mostrarlo, llama:
toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();