Создание контекстного меню, не зависящего от активности, можно реализовать с помощью класса `PopupMenu` в Android. Этот класс позволяет вам создавать контекстные меню, которые можно использовать в любом месте вашего приложения.
Ниже представлен пример, который демонстрирует, как создать `PopupMenu` в вашем приложении и использовать цвета из ваших тем:
1. Во-первых, убедитесь, что вы добавили зависимости для Material Components, если вы планируете использовать Material Design:
```groovy
implementation 'com.google.android.material:material:1.7.0'
```
2. Затем вы можете создать класс, который будет отвечать за отображение контекстного меню. Например:
```kotlin
import android.content.Context
import android.view.MenuItem
import android.view.PopupMenu
import android.view.View
import androidx.appcompat.widget.PopupMenu
class CustomContextMenu(private val context: Context, private val anchor: View) {
fun showMenu() {
val popupMenu = PopupMenu(context, anchor)
popupMenu.menuInflater.inflate(R.menu.context_menu, popupMenu.menu)
// Здесь вы можете установить обработчик кликов для пунктов меню
popupMenu.setOnMenuItemClickListener { item: MenuItem ->
when (item.itemId) {
R.id.menu_item_1 -> {
// Действие для первого пункта
true
}
R.id.menu_item_2 -> {
// Действие для второго пункта
true
}
else -> false
}
}
// Показать контекстное меню
popupMenu.show()
}
}
```
3. Создайте файл ресурсов меню `res/menu/context_menu.xml`:
```xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_item_1"
android:title="Первый пункт" />
<item
android:id="@+id/menu_item_2"
android:title="Второй пункт" />
</menu>
```
4. В вашей активности или фрагменте вы можете создать экземпляр `CustomContextMenu` и вызвать метод `showMenu()` в нужный момент, например, в обработчике клика на вид:
```kotlin
val anchorView = findViewById<View>(R.id.your_view) // Замените на ваш вид
val contextMenu = CustomContextMenu(this, anchorView)
anchorView.setOnLongClickListener {
contextMenu.showMenu()
true
}
```
Таким образом, вы можете использовать `PopupMenu` как контекстное меню, которое не зависит от активности и имеет доступ к ресурсам вашего приложения, включая стили и цвета из `themes.xml`.