#android-studio #kotlin #widget #click #appwidgetprovider
Вопрос:
Я попытался создать виджет, и мне это удалось, но как я могу удовлетворить потребности в щелчках инструментов в виджете?
То, о чем я говорю, — это не перенаправление на действие, я ищу метод, с помощью которого я могу создать функцию.
Файл макета, используемый для виджета ниже
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:id="@ id/kare"
android:theme = "@style/Theme.Mytwo.AppWidgetContainer" >
<Button
android:id = "@ id/appwidget_text"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_centerInParent = "true"
android:background = "#048018"
android:text = "clean"
android:textSize = "24sp"
android:padding="15dp"
android:textStyle = "bold" />
</RelativeLayout >
Это мой класс поставщика виджетов
class NewAppWidget : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { // There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
}
internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) {
val views = RemoteViews(context.packageName, R.layout.new_app_widget )
appWidgetManager.updateAppWidget(appWidgetId, views)
}
И, наконец, мой файл с информацией о поставщике
<appwidget-provider xmlns:android = "http://schemas.android.com/apk/res/android"
android:description = "@string/app_widget_description"
android:initialKeyguardLayout = "@layout/new_app_widget"
android:initialLayout = "@layout/new_app_widget"
android:minWidth = "100dp"
android:minHeight = "40dp"
android:previewImage = "@drawable/ic_launcher_foreground"
android:previewLayout = "@layout/new_app_widget"
android:resizeMode = "horizontal|vertical"
android:targetCellWidth = "2"
android:targetCellHeight = "2"
android:updatePeriodMillis = "86400000"
android:widgetCategory = "home_screen" />
Ответ №1:
Я не уверен, что вы подразумеваете под «созданием функции». Единственный способ заставить что-то произойти при нажатии на виджет-это через RemoteViews#setOnCheckedChangeResponse
или RemoteViews#setOnClickFillInIntent
или RemoteViews#setOnClickPendingIntent
или RemoteViews#setOnClickResponse
. Помимо вызова RemoteViews.RemoteResponse#addSharedElement
, все , что может сделать любой из них, — это послать сигнал Intent
, который может запустить Activity
или пробудить сигнал BroadcastReceiver
.
Вы не можете выполнить свой собственный код внутри виджета: любой код, который вы хотите выполнить в ответ на щелчок по виджету, должен быть в Activity
или BroadcastReceiver
. Это не обязательно должно быть Activity
или BroadcastReceiver
внутри приложения, создавшего виджет, хотя обычно так и будет.
Поскольку RemoteViews
он создан внутри вашего приложения AppWidgetProvider#updateAppWidget
, вы можете добавить его в appWidgetId
качестве дополнительного PendingIntent
, чтобы определить, на какой виджет был нажат.