example - ¿Mostrar Android SnackBar sobre el teclado?
snackbar material design (7)
¿Es posible mostrar la Snackbar de Android sobre el teclado (como en la coordenada Y, no en capas)? El Snackbar actualmente se oculta si se muestra el teclado, lo cual es un comportamiento indeseable.
Conjunto
android:windowSoftInputMode="adjustResize"
en
AndroidManifest.xml
para la actividad que contiene su snackbar
Este es mi código para snackbar y funciona de manera similar + ya que necesita relativeLayout es el ID de diseño principal principal que he aprobado.
snackbar=snackbar.make(relativeLayout,"Image is Saved to "+Savedfile.getPath().toString(),Snackbar.LENGTH_INDEFINITE) .setAction("OK", new OnClickListener() { @Override public void onClick(View v) { snackbar.dismiss(); snackbar=null; System.gc(); finish(); } }); snackbar.show();
Los siguientes trabajos:
-
Asegúrese de que la actividad / fragmento desde el que está llamando a
Snackbar
contenga unScrolView
. -
Asegúrese de configurar la vista de snackbar para
findViewById(android.R.id.content)
:
Snackbar.make(getActivity().findViewById(android.R.id.content), "hello world").show();
-
O, si desea poder deslizar la
Snackbar
, asegúrese de queScrolView
esté anidado dentro de unCoordinatorLayout
.
Snackbar.make(getActivity().findViewById(android.R.id.my_coordinator_layout), "hello world").show();
Puede ocultar el teclado cuando se muestra
Snackbar
.
snackbar=snackbar.make(relativeLayout,"Image is Saved to "+Savedfile.getPath().toString(),Snackbar.LENGTH_INDEFINITE)
.setAction("OK", new OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
snackbar=null;
System.gc();
finish();
}
});
snackbar.show();
Si anida su diseño en una Vista de desplazamiento, la barra de aperitivos aparecerá en la parte superior del teclado. Esto se debe a que la vista cambiará de tamaño para ocupar solo el espacio disponible sobre el teclado. Y, por supuesto, su Vista también podrá desplazarse si es necesario en cualquier momento, mientras se muestre o no el teclado.
este es mi código, no es necesario configurar la vista desde el método, puede obtenerlo desde DecoreView:
public static void longSnack(final String text) { hideKeyboard(); Snackbar snackbar = Snackbar.make(context.getWindow().getDecorView(), text, Snackbar.LENGTH_LONG); snackbar.show(); } public static void shortSnack(final String text) { hideKeyboard(); Snackbar snackbar = Snackbar.make(context.getWindow().getDecorView(), text, Snackbar.LENGTH_SHORT); snackbar.show(); } private static void hideKeyboard() { InputMethodManager inputMethodManager = (InputMethodManager)context.getSystemService(Activity.INPUT_METHOD_SERVICE); if (inputMethodManager != null) { inputMethodManager.hideSoftInputFromWindow(context.getWindow().getDecorView().getWindowToken(), 0); } }
He resuelto el problema de esta manera:
Crear una clase:
public class ShowSnackBar { public static void show(Context context, String message, View view) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show(); } }
Puede acceder a esta clase desde cualquier actividad en la aplicación
Uso:
ShowSnackBar.show(LoginOtpActivity.this,"Please enter Email ID /Mobile",linear_container);