¿Cómo evitar el botón de acción flotante superpuesto de Snackbar en Android?

Requisito previo: 

Si uno ha implementado el botón de acción flotante (FAB) en su aplicación de Android y también existe una implementación de Snackbar en la misma aplicación, entonces Snackbar definitivamente se superpondrá al botón de acción flotante. Eche un vistazo al siguiente GIF que muestra el problema del Snackbar y el botón de acción flotante:

The issue

¿Cómo arreglar este problema?

Entonces, en este artículo, solucionemos este problema tomando un ejemplo simple en Android. Tenga en cuenta que vamos a implementar este ejemplo utilizando el lenguaje Java .

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: agregue la dependencia en el archivo Gradle del nivel de la aplicación.

  • Aquí estamos usando el botón de acción flotante que está diseñado y desarrollado por el equipo de diseño de materiales de Google.
  • Agregue la dependencia en el archivo build.gradle(app) como:

implementación ‘com.google.android.material:material:1.3.0-alpha02’

  • Asegúrese de agregar la dependencia al archivo Gradle del nivel de la aplicación. Después de agregar la dependencia, debe hacer clic en el botón » Sincronizar ahora » que aparece en la esquina superior derecha del IDE de Android Studio .
  • Cuando el usuario haga clic en el botón Sincronizar ahora, asegúrese de estar conectado a la red para que pueda descargar los archivos necesarios.
  • Consulte la imagen a continuación si no puede obtener los pasos mencionados anteriormente:

Gradle file

Paso 3: agregue los íconos FAB al archivo Drawable

  • Para fines de demostración, se importarán 3 íconos en la carpeta Drawable, uno puede importar los íconos de su elección. Se puede hacer haciendo clic con el botón derecho en la carpeta dibujable -> Nuevo -> Activo vectorial . Consulte la siguiente imagen para importar el icono de vector.

Vector Asset

  • Ahora seleccione su icono de vector:

 select your vector icon

Paso 4: trabajar con el archivo activity_main.xml

  • En el archivo activity_main.xml agregue un botón de acción flotante (FAB) y un botón. Entonces, cada vez que el usuario haga clic en el botón , aparecerá un Snackbar.
  • Invoque el siguiente código dentro del archivo activity_main.xml. Para una comprensión clara, consulte los comentarios dentro del código que se proporciona a continuación:

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <Button
        android:id="@+id/show_snackbar_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="SHOW SNACKBAR"
        app:layout_constraintBottom_toTopOf="@+id/add_fab"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />
 
    <!--Add simple Parent Floating Action Button-->
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:src="@drawable/ic_baseline_ac_unit_24"
        app:fabSize="normal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>

Se produce la siguiente interfaz de usuario de salida:

Output UI

Paso 5: trabajar con el archivo MainActivity.java

  • Ahora resuelva el problema mediante programación en el archivo MainActivity.java.
  • Uno puede observar debajo del código que el botón MOSTRAR SNACKBAR al hacer clic en el oyente hemos configurado AnchorView en el FAB principal. Para que el FAB principal sea visible, incluso después de que aparezca el Snackbar, y el Snackbar se mostrará en la parte superior del FAB.
  • Invoque el siguiente código y se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
 
public class MainActivity extends AppCompatActivity {
 
    Button mSnackBarButton;
    FloatingActionButton mAddFab;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // Register the show snackbar button with appropriate ID
        mSnackBarButton = findViewById(R.id.show_snackbar_button);
 
        // also register the floating action button with appropriate ID
        mAddFab = findViewById(R.id.add_fab);
 
        // Build and show the simple Snackbar with action button on it
        mSnackBarButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar snackbar = Snackbar.make(view, "This is sample snackbar", Snackbar.LENGTH_SHORT);
                // Set the Anchor View to particular view to display the snackbar to top of it
                snackbar.setAnchorView(mAddFab);
                snackbar.setAction("OKAY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // Do appropriate action on click of snackbar action button
                    }
                });
                snackbar.show();
            }
        });
    }
}

Salida: ejecutar en el emulador

Publicación traducida automáticamente

Artículo escrito por adityamshidlyali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *