Компоненты дизайна Snackbar Material Design в Android
Для реализации различных других компонентов материального дизайна требуются специальные атрибуты. Но в этой статье реализована Snackbar Material design, и для ее реализации в приложении не требуются специальные атрибуты. Взгляните на следующее изображение, чтобы различать обычную закусочную и закусочную панель Material Design в Android. Что отличает Material design Snackbar, так это его дизайн, который легко реализовать и настроить. Обратите внимание, что мы собираемся реализовать этот проект на языке Java.
Шаги по реализации Snackbar Material Design
Шаг 1. Создайте пустой проект Android Studio.
- Создайте пустой проект Android Studio Activity. Обратитесь к Android | Как создать / запустить новый проект в Android Studio для создания проекта Android Studio. Обратите внимание, что мы собираемся реализовать этот проект на языке Java.
Шаг 2: Добавьте необходимую зависимость
- Добавьте библиотеку зависимостей материального дизайна в файл градиента уровня приложения.
- Чтобы получить файл градиента уровня приложения, перейдите в Project> app> build.gradle .
- И вызовите следующую зависимость.
implementation ‘com.google.android.material:material:1.3.0-alpha03’
- Обратитесь к следующему изображению, если не удалось получить файл градиента уровня приложения и вызвать зависимость. После вызова зависимости нажмите кнопку « Синхронизировать сейчас » в правом верхнем углу. И убедитесь, что система должна быть подключена к сети, чтобы она могла загружать необходимые файлы.
Шаг 3. Измените базовую тему приложения на тему «Компоненты материала» в файле styles.xml.
- Чтобы изменить базовую тему приложения, перейдите к app> src> res> styles.xml и вызовите следующий код.
XML
< resources > <!-- Base application theme. --> < style name = "AppTheme" parent = "Theme.MaterialComponents.Light.DarkActionBar" > <!-- Customize your theme here. --> < item name = "colorPrimary" >@color/colorPrimary</ item > < item name = "colorPrimaryDark" >@color/colorPrimaryDark</ item > < item name = "colorAccent" >@color/colorAccent</ item > </ style > </ resources > |
- Обратитесь к следующему изображению, если не удается найти и вызвать тему компонентов материала.
Шаг 4. Теперь работаем с файлом activity_main.xml.
- Вызовите следующий код XML в файле activity_main.xml или создайте его самостоятельно.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" tools:ignore = "HardcodedText" > <!--a sample button to show or popup a MDC snackbar--> < Button android:id = "@+id/show_snackbar_button" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginStart = "32dp" android:layout_marginTop = "128dp" android:layout_marginEnd = "32dp" android:text = "SHOW SNACKBAR" /> </ LinearLayout > |
Выходной интерфейс: запуск в эмуляторе
Шаг 5: Теперь работаем с MainActivity.java
Джава
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.material.snackbar.Snackbar; public class MainActivity extends AppCompatActivity { // Button to show the snackbar Button bShowSnackbar; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // register the show snackbar button with the appropriate ID bShowSnackbar = findViewById(R.id.show_snackbar_button); // button click listener to show the snackbar bShowSnackbar.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Snackbar snackbar = Snackbar.make(v, "You have deleted an item" , Snackbar.LENGTH_LONG); snackbar.setAction( "UNDO" , new View.OnClickListener() { @Override public void onClick(View v) { // perform any action when the button on the snackbar is clicked here in this case // it shows a simple toast Toast.makeText(MainActivity. this , "The item has been restored" , Toast.LENGTH_SHORT).show(); } }); snackbar.show(); } }); } } |
Производится следующий вывод:
Дополнительные функции Snackbar Material Design
Функциональность 1. Установите продолжительность Snackbar вручную.
- Вызовите следующий код внутри MainActivity.java .
- В этом случае продолжительность закрытия Snackbar установлена на 3 секунды.
Джава
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.material.snackbar.Snackbar; public class MainActivity extends AppCompatActivity { // Button to show the snackbar Button bShowSnackbar; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // register the show snackbar button with the appropriate ID bShowSnackbar = findViewById(R.id.show_snackbar_button); // button click listener to show the snackbar bShowSnackbar.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Snackbar snackbar = Snackbar.make(v, "You have deleted an item" , Snackbar.LENGTH_LONG); snackbar.setAction( "UNDO" , new View.OnClickListener() { @Override public void onClick(View v) { // perform any action when the button on the snackbar is clicked here in this case // it shows a simple toast Toast.makeText(MainActivity. this , "The item has been restored" , Toast.LENGTH_SHORT).show(); } }); // the duration is in terms of milliseconds in this case its 3 seconds snackbar.setDuration( 3000 ); snackbar.show(); } }); } } |
Создается следующий результат:
Функциональность 2: предотвращение перекрытия Snackbar над FAB (плавающей кнопкой действия)
- Чтобы предотвратить простое перекрытие панелей Sncakbar, обратитесь к разделу Как избежать плавающей кнопки действия Snackbar Overlap в Android ?. Этот метод показывает настройку acnhorPoint на плавающую кнопку действия.
- Вызовите следующий код внутри activity_main.xml .
XML
<? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" tools:ignore = "HardcodedText" > <!--a sample button to show or popup a MDC snackbar--> < Button android:id = "@+id/show_snackbar_button" android:layout_width = "0dp" android:layout_height = "wrap_content" android:layout_marginStart = "32dp" android:layout_marginTop = "128dp" android:layout_marginEnd = "32dp" android:text = "SHOW SNACKBAR" app:layout_constraintEnd_toEndOf = "parent" app:layout_constraintStart_toStartOf = "parent" app:layout_constraintTop_toTopOf = "parent" /> <!--a simple floating action button with icon--> < com.google.android.material.floatingactionbutton.FloatingActionButton android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginEnd = "16dp" android:layout_marginBottom = "16dp" android:backgroundTint = "@color/colorPrimary" android:src = "@drawable/ic_add_black_24dp" app:layout_constraintBottom_toTopOf = "@+id/snackbar_layout" app:layout_constraintEnd_toEndOf = "parent" /> <!--this layout makes the floating action button to raise up whenever the snackbar pops up from bottom--> < androidx.coordinatorlayout.widget.CoordinatorLayout android:id = "@+id/snackbar_layout" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_alignParentStart = "true" android:layout_alignParentBottom = "true" app:layout_constraintBottom_toBottomOf = "parent" /> </ androidx.constraintlayout.widget.ConstraintLayout > |
- Теперь работаем с файлом MainActivity.java, чтобы обработать перекрытие Snackbar.
Джава
import androidx.appcompat.app.AppCompatActivity; import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.material.snackbar.Snackbar; public class MainActivity extends AppCompatActivity { // Button to show the snackbar Button bShowSnackbar; // coordinator layout for snackbar CoordinatorLayout mSnackbarLayout; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // register the show snackbar button with the appropriate ID bShowSnackbar = findViewById(R.id.show_snackbar_button); // register the coordinator layout with the appropriate ID mSnackbarLayout = findViewById(R.id.snackbar_layout); // button click listener to show the snackbar bShowSnackbar.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // pass the mSnackbarLayout as the view to the "make" function Snackbar snackbar = Snackbar.make(mSnackbarLayout, "You have deleted an item" , Snackbar.LENGTH_LONG); snackbar.setAction( "UNDO" , new View.OnClickListener() { @Override public void onClick(View v) { // perform any action when the button on the snackbar is clicked // here in this case it shows a simple toast Toast.makeText(MainActivity. this , "The item has been restored" , Toast.LENGTH_SHORT).show(); } }); // the duration is in terms of milliseconds snackbar.setDuration( 3000 ); snackbar.show(); } }); } } |
Выход: запустить на эмуляторе
Функциональность 3: проведите по экрану, чтобы закрыть Snackbar.
- Вызовите следующий код внутри activity_main.xml
XML
<? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" tools:ignore = "HardcodedText" > <!--a sample button to show or popup a MDC snackbar--> < Button android:id = "@+id/show_snackbar_button" android:layout_width = "0dp" android:layout_height = "wrap_content" android:layout_marginStart = "32dp" android:layout_marginTop = "128dp" android:layout_marginEnd = "32dp" android:text = "SHOW SNACKBAR" app:layout_constraintEnd_toEndOf = "parent" app:layout_constraintStart_toStartOf = "parent" app:layout_constraintTop_toTopOf = "parent" /> <!--this layout makes the floating action button to raise up whenever the snackbar pops up from bottom--> < androidx.coordinatorlayout.widget.CoordinatorLayout android:id = "@+id/snackbar_layout" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_alignParentStart = "true" android:layout_alignParentBottom = "true" app:layout_constraintBottom_toBottomOf = "parent" /> </ androidx.constraintlayout.widget.ConstraintLayout > |
- Теперь работаем с файлом MainActivity.java и при создании Snackbar не забудьте передать макет координатора для функции « make ».
Джава
import androidx.appcompat.app.AppCompatActivity; import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.material.snackbar.Snackbar; public class MainActivity extends AppCompatActivity { // Button to show the snackbar Button bShowSnackbar; // coordinator layout for snackbar CoordinatorLayout mSnackbarLayout; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // register the show snackbar button with the // appropriate ID bShowSnackbar = findViewById(R.id.show_snackbar_button); // register the coordinator layout with the // appropriate ID mSnackbarLayout = findViewById(R.id.snackbar_layout); // button click listener to show the snackbar bShowSnackbar.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // pass the mSnackbarLayout as the view // to the make function Snackbar snackbar = Snackbar.make(mSnackbarLayout, "You have deleted an item" , Snackbar.LENGTH_LONG); snackbar.setAction( "UNDO" , new View.OnClickListener() { @Override public void onClick(View v) { // perform any action when the button on the snackbar is clicked here in this // case it shows a simple toast Toast.makeText(MainActivity. this , "The item has been restored" , Toast.LENGTH_SHORT).show(); } }); // the duration is in terms of milliseconds snackbar.setDuration( 3000 ); snackbar.show(); } }); } } |
Выход: запустить на эмуляторе