Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Snackbar con CoordinatorLayout deshabilitar deshabilitar

Estoy usando el apoyo

  • FloatingActionButton
  • Snackbar
  • CoordinatorLayout

Necesito el CoordinatorLayout de modo que si SnackBar se muestra el FloatingActionButton se mueve para arriba para hacer sitio para el Snackbar. Para una mejor comprensión compruebe este video .

Estoy usando SnackBar para el doble-detrás para salir de la aplicación, pero el SnackBar puede ser despedido.

¿Hay una manera de deshabilitar el descartar en el SnackBar?

Snackbar snackbar = Snackbar.make(view, R.string.press_back_again_to_exit, Snackbar.LENGTH_SHORT); snackbar.setAction(R.string.ok, new View.OnClickListener() { @Override public void onClick(View v) { } }); snackbar.setActionTextColor(getResources().getColor(R.color.white)); View view = snackbar.getView(); view.setBackgroundColor(getResources().getColor(R.color.orange_warning)); snackbar.show(); 

Diseño

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" xmlns:sothree="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:fitsSystemWindows="true"> <com.sothree.slidinguppanel.SlidingUpPanelLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom" sothree:umanoFadeColor="@android:color/transparent" sothree:umanoPanelHeight="100dp" sothree:umanoShadowHeight="4dp"> <!-- Toolbar and main content --> <LinearLayout android:id="@+id/toolbar_and_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/toolbar"/> <!-- Your content layout --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> </LinearLayout> <!-- Sliding up panel layout --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/darker_grey" android:orientation="vertical"> ... </LinearLayout> </com.sothree.slidinguppanel.SlidingUpPanelLayout> <!-- Navigation drawer --> <ExpandableListView android:id="@+id/lv_left_drawer" android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/white" android:childDivider="@android:color/transparent" android:clickable="true" android:divider="@color/divider_color" android:dividerHeight="0.6dp" android:fadeScrollbars="true" android:groupIndicator="@null" android:listSelector="@drawable/button_drawer_child_selector" android:scrollbarSize="0dp"/> </android.support.v4.widget.DrawerLayout> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|bottom" android:layout_marginBottom="@dimen/floating_action_button_margin" android:layout_marginRight="@dimen/floating_action_button_margin" android:src="@drawable/ic_add" android:visibility="invisible" app:backgroundTint="@color/orange" app:borderWidth="0dp" app:elevation="6dp" app:fabSize="normal"/> </android.support.design.widget.CoordinatorLayout> 

PD

Estoy enterado de esta biblioteca de GitHub , que tiene esta funcionalidad, pero hay una manera "nativa" de hacerla?

  • AdView y FloatingActionButton se superponen mientras se utiliza CoordinatorLayout
  • Coloque Snackbar en el orden z más alto para evitar ser bloqueado por AutoCompleteTextView desplegable
  • Administrar los objetos View y Class <?> Actuales
  • El tema personalizado interfiere con el color de fondo del bocadillo
  • ¿Es una buena práctica incluir todos los diseños en CoordinatorLayout?
  • ArrayIndexOutOfBoundsException mientras descarta Snackbar / ViewDragHelper
  • Prueba de Espresso de Android escamosa - Snackbar
  • ¿Cómo puede ajustar Android SnackBar a una posición específica en la pantalla
  • 4 Solutions collect form web for “Snackbar con CoordinatorLayout deshabilitar deshabilitar”

    Puede modificar la duración de Snackbar para que se muestre. Será similar a desactivar deshabilitar.

     int LENGTH_INDEFINITE Show the Snackbar indefinitely. 

    Comprobar documentos .

    Si no funciona Para esto, entonces sólo hay una manera, implementar su Snackbar personalizado y sobrescribir método dismiss() y en que no hacer nada. 🙂 Como dismiss() es una API pública.

    La respuesta sobre el uso de LENGTH_INDEFINITE no es suficiente.

    Solo es no descartable cuando Snackbar no es hijo de CoordinatorLayout . Cuando es un niño, todavía puede deslizar el SnackBar.

    Lo que puede hacer en ese caso es escuchar el golpe de despedir y simplemente volver a mostrar la Snackbar.

     public void showAnnoyingSnackBar(View root, String text) { Snackbar.make(root, text, Snackbar.LENGTH_INDEFINITE) .setCallback(new Snackbar.Callback() { @Override public void onDismissed(Snackbar snackbar, int event) { // recursively call this method again when the snackbar was dismissed through a swipe if (event == DISMISS_EVENT_SWIPE) showAnnoyingSnackBar(root, text); } }) .show(); } 

    Me di cuenta de que cuando el método show () se llama, SnackbarLayout no está totalmente inicializado todavía.

    Para bloquear dismiss tenemos que borrar el comportamiento después de la inicialización SnackbarLayout . El mejor lugar para hacer esto es por ejemplo en OnPreDrawListener de SnackbarLayout

     final Snackbar snack = Snackbar.make(getView(), "I can't be dissmiss", Snackbar.LENGTH_INDEFINITE); snack.show(); snack.getView().getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { snack.getView().getViewTreeObserver().removeOnPreDrawListener(this); ((CoordinatorLayout.LayoutParams) snack.getView().getLayoutParams()).setBehavior(null); return true; } }); 

    Tuve éxito en la desactivación de los snackbars de lado-a-despedir con el siguiente hack (después de llamar a snackbar.show ())

     ((android.support.design.widget.CoordinatorLayout.LayoutParams) snackbar.getView().getLayoutParams()).setBehavior(null); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.