Intereting Posts
Невозможно импортировать проект в студию Android Хранилище Firebase – StorageReference.getFile () вылетает, когда устройство отключено Режим киоска в Android Как сделать линейное заполнение оставшегося пространства в режиме релятивирования? NetworkInterface.getNetworkInterfaces () генерирует исключение с нулевой строкой сообщения SQlite Получение ближайших мест (с широтой и долготой) Как создать кнопки Borderless в Android Как сделать Android Expansion File с помощью Android Studio? Google TV – разрабатывает для эффективности так же важно, как и с телефонами / планшетами? Приложение Кордовы, которое не использует push-уведомления: «Отсутствие права на уведомление push-уведомления» Android: Поведение launchMode = "singleTask" не так, как описано? Пример Google Play Services: «connectionResult не может быть разрешен» Обнаружение цвета фонового изображения с помощью Android Paint Запуск приложения Android с ошибками студии Android: фатальный сигнал 13 Код SIGPIPE -6 Самый простой способ узнать (программно), какая папка ресурсов используется на основе плотности / размера экрана

Как установитьLayoutParams на динамически добавленные элементы в Widget

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

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_design); RemoteViews newView = new RemoteViews(context.getPackageName(), R.layout.widget_item); views.addView(R.id.view_container, newView); 

Но как я могу динамически добавлять поля, веса и другие свойства к добавленным элементам?

В настоящее время я пробовал (используя код, который я нашел с разных сайтов):

 LinearLayout item = (LinearLayout) ((Activity) context).findViewById(R.id.widgetItem); MarginLayoutParams marginParams = new MarginLayoutParams(item.getLayoutParams()); marginParams.setMargins(10, 50, 4, 5); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(marginParams); item.setLayoutParams(layoutParams); 

Но эта сила закрывается

LogCat:

09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): FATAL EXCEPTION: main 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): java.lang.RuntimeException: невозможно запустить приложение com.example. Test.HomeWidget: java.lang.ClassCastException: android.app.ReceiverRestrictedContext 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at android.app.ActivityThread.handleReceiver (ActivityThread.java:2821) 09-10 22 : 01: 55.283: ERROR / AndroidRuntime (30060): at android.app.ActivityThread.access $ 3200 (ActivityThread.java:125) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2083) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at android.os.Handler.dispatchMessage (Handler.java:99) 09-10 22: 01: 55.283 : ERROR / AndroidRuntime (30060): at android.os.Looper.loop (Looper.java:123) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at android.app.ActivityThread.main (ActivityThread. Java: 4627) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at java.lang.refle Ct.Method.invokeNative (родной метод) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): при java.lang.reflect.Method.invoke (Method.java:521) 09-10 22: 01: 55.283 : ERROR / AndroidRuntime (30060): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): на com.android. Internal.os.ZygoteInit.main (ZygoteInit.java:616) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at dalvik.system.NativeStart.main (родной метод) 09-10 22: 01: 55.283 : ERROR / AndroidRuntime (30060): вызвано: java.lang.ClassCastException: android.app.ReceiverRestrictedContext 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at com.example.test.HomeWidget.onUpdate (HomeWidget .java: 37) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): at android.appwidget.AppWidgetProvider.onReceive (AppWidgetProvider.java:61) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060) ): At android.app.ActivityThread.handleReceiver (ActivityThread.java:2810) 09-10 22: 01: 55.283: ОШИБКА / AndroidRun Время (30060): … еще 10

 LinearLayout layoutParams = item.getLayoutParams(); layoutParams.setMargins(10, 50, 4, 5); item.setLayoutParams(layoutParams); 

Как-то создание новых LayoutParams всегда вызывает такую ​​ошибку. Я думаю, что некоторые поля не работают. Скопируйте только существующие.

Как я уже сказал в комментариях, вы пытаетесь использовать context для Activity . Этот контекст не является Activity . Из AppWidgetProvider.onReceive() :

Context в котором работает приемник.

Кроме того, вы не можете получить доступ к Activity из виджета.

Если вы хотите вызвать Activity из виджета, вы должны зарегистрировать BroadcastReceiver в этой Context.sendBroadcast() и вызвать его с помощью Context.sendBroadcast() .

EDIT : И если вы хотите установить LayoutParams для RemoteViews , вам лучше сделать это в XML.

У меня есть способ изменить нижний край любого представления для любого количества пикселей. Вы можете пойти дальше и сделать его более общим для верхнего, правого и левого полей.

 private static void adjustViewHeight(int resID, int pixels, Activity activity){ ((FrameLayout.LayoutParams)activity.findViewById(resID).getLayoutParams()).bottomMargin = pixels; activity.findViewById(resID).invalidate(); activity.findViewById(resID).requestLayout(); } 

Надеюсь это поможет,

-serkan