Всплывающее меню 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
Создайте файл ресурсов меню с именем 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()
}
}
}
Вывод:



