Всплывающее меню Popup Menu в Kotlin Android

Всплывающее меню Kotlin Android (Popup Menu) – это меню со списком, которое отображается вертикально при просмотре. Всплывающее меню появляется под картинкой, если есть место, в противном случае появляется выше. Прикосновение к всплывающему меню заставляет его исчезнуть.

Всплывающее меню предоставляет действия, связанные с конкретным содержимым, и не влияет на соответствующее содержимое.

Интерфейс PopupMenu.OnMenuItemClickListener получает события щелчка элементов меню, если у элементов нет прослушивателя кликов.

Пример всплывающего меню Kotlin Android

В этом примере мы добавим элементы всплывающего меню в представление (кнопку). При нажатии на кнопку отображаются элементы всплывающего меню, над которыми мы можем выполнить соответствующее действие.

Создайте проект Android и выберите Basic Activity в Котлин. Это действие автоматически генерирует коды для меню.

Activity_main.xml

Добавьте следующий код в каталог layout в файле activity_main.xml. Этот код генерируется автоматически при создании основного действия.

 <?xml version="1.0" encoding="utf-8"?>  
<android.support.design.widget.CoordinatorLayout 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="example.javatpoint.com.kotlinpopupmenu.MainActivity">  
  
    <android.support.design.widget.AppBarLayout  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:theme="@style/AppTheme.AppBarOverlay">  
  
        <android.support.v7.widget.Toolbar  
            android:id="@+id/toolbar"  
            android:layout_width="match_parent"  
            android:layout_height="?attr/actionBarSize"  
            android:background="?attr/colorPrimary"  
            app:popupTheme="@style/AppTheme.PopupOverlay" />  
  
    </android.support.design.widget.AppBarLayout>  
  
    <include layout="@layout/content_main" />  
  
</android.support.design.widget.CoordinatorLayout>

content_main.xml

Добавьте следующий код в файл content_main.xml в каталоге макета. В этом макете мы размещаем компонент представления кнопок.

 
<?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.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"  
    app:layout_behavior="@string/appbar_scrolling_view_behavior"  
    tools:context="example.javatpoint.com.kotlinpopupmenu.MainActivity"  
    tools:showIn="@layout/activity_main">  
  
    <Button  
        android:id="@+id/button"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:text="Button"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent" />  
</android.support.constraint.ConstraintLayout>

strings.xml

Добавьте следующий код в файл strings.xml.

 
<resources>  
    <string name="app_name">Kotlin PopupMenu</string>  
    <string name="action_settings">Settings</string>  
    <string name="action_cricket">Cricket</string>  
    <string name="action_football">Football</string>  
    <string name="action_hockey">Hockey</string>  
</resources>

Создайте файл ресурсов меню с именем popup_menu.xml в каталоге меню. Добавьте тег элемента, который создает элемент меню для всплывающего меню.

<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto">  
    <item  
        android:id="@+id/action_crick"  
        android:title="@string/action_cricket"  
        app:showAsAction="never"/>  
    <item  
        android:id="@+id/action_ftbal"  
        android:title="@string/action_football"  
        app:showAsAction="never"/>  
    <item  
        android:id="@+id/action_hockey"  
        android:title="@string/action_hockey"  
        app:showAsAction="never"/>  
</menu>

MainActivity.kt

Добавьте следующий код в класс MainActivity.kt. В этом классе мы реализуем интерфейс PopupMenu.OnMenuItemClickListener, который получает события щелчка пунктов меню. Чтобы отобразить всплывающее меню, вызовите метод PopupMenu.show().

 
package example.javatpoint.com.kotlinpopupmenu  
  
import android.os.Bundle  
import android.support.v7.app.AppCompatActivity  
import android.widget.Button  
import android.widget.PopupMenu  
import android.widget.Toast  
  
import kotlinx.android.synthetic.main.activity_main.*  
  
class MainActivity : AppCompatActivity() {  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout.activity_main)  
        setSupportActionBar(toolbar)  
  
        val button = findViewById<Button>(R.id.button)  
        button.setOnClickListener {  
           val popupMenu: PopupMenu = PopupMenu(this,button)  
           popupMenu.menuInflater.inflate(R.menu.popup_menu,popupMenu.menu)  
           popupMenu.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { item ->  
                    when(item.itemId) {  
                    R.id.action_crick ->  
                        Toast.makeText(this@MainActivity, "You Clicked : " + item.title, Toast.LENGTH_SHORT).show()  
                    R.id.action_ftbal ->  
                        Toast.makeText(this@MainActivity, "You Clicked : " + item.title, Toast.LENGTH_SHORT).show()  
                    R.id.action_hockey ->  
                        Toast.makeText(this@MainActivity, "You Clicked : " + item.title, Toast.LENGTH_SHORT).show()  
                }  
                true  
           })  
           popupMenu.show()  
        }  
    }  
}

Вывод:

Всплывающее меню Popup Menu

Всплывающее меню Kotlin

Оцените статью