Intereting Posts
Android – просмотр прокрутки ViewPager Выполнение задачи Async для Android Невозможно преобразовать представление в объект класса java.lang.String Вкладки Android Tablayout с уведомлением, например whatsApp Как создать запрос с выбором значения поля постороннего объекта Создать json в android Почему у ContentValues ​​есть метод put, который поддерживает Boolean? Как отправить уведомление fcm на несколько устройств в одном формате fcm Android webview – однострочные комментарии javascript, вызывающие ошибки Uncaught SyntaxError? Виртуальная память и пейджинг Android Плавающая панель инструментов с элементами выбора текста Где я могу найти хорошие игры с открытым исходным кодом для ускорения процесса обучения? Уведомление об обновлении приложений для Android Android – поля, указанные в пользовательском стиле, не действуют Java, специальный сортировка ArrayList с более длинными записями в конце

Как изменить вид макета виджета программно

Возьмите этот вид виджетов, например (часть моего всего макета виджетов)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/widget_background_dark_4x2" android:orientation="horizontal" android:id="@+id/widget_main" > 

Я хочу, чтобы иметь возможность изменять фоновый доход, используемый на основе выбора пользователей. Например, используя удаленные представления, я могу обновить цвет textview, выполнив что-то вроде этого:

 remoteView.setTextColor(R.id.text_view1, Color.WHITE); 

Тем не менее мне было трудно сделать то же самое на фоне моей линейной компоновки. Я попробовал это:

 remoteView.setBitmap(R.id.widget_main, "setBackgroundDrawable", ((BitmapDrawable) context.getResources().getDrawable(R.drawable.widget_background_dark_4x2)).getBitmap()); 

Но я получаю следующую ошибку:

 06-01 22:46:36.305: WARN/AppWidgetHostView(244): android.widget.RemoteViews$ActionException: view: android.widget.LinearLayout doesn't have method: setBackgroundDrawable(android.graphics.Bitmap) 

Любая помощь с этим была бы весьма признательна.

<< EDIT >> Также попробовали это:

 Bitmap bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.widget_background_light_4x2)).getBitmap(); remoteView.setBitmap(R.id.widget_main, "setBackgroundDrawable",bitmap ); 

Но, к сожалению, получите следующую ошибку:

06-01 23:11:26.039: WARN/AppWidgetHostView(244): updateAppWidget couldn't find any view, using error view 06-01 23:11:26.039: WARN/AppWidgetHostView(244): android.widget.RemoteViews$ActionException: view: android.widget.LinearLayout doesn't have method: setBackgroundDrawable(android.graphics.Bitmap)

Solutions Collecting From Web of "Как изменить вид макета виджета программно"

Ты пробовал:

 remoteView.setInt(R.id.widget_main, "setBackgroundResource", R.drawable.widget_background_dark_4x2); 

Хорошо, но единственным решением, с которым я мог бы справиться, было изменение способа отображения фонового изображения в LinearLayout. Как вы можете видеть выше, я использовал андроид: фоновый тег для отображения изображения. То, что я закончил, состояло в том, что я удалил это, а затем заключил в оболочку весь мой макет виджетов (который находился внутри линейной очереди внутри relativelayout.Я тогда у меня был только Image Image decalred в RelativeLayout, а затем остальная часть виджета linearlayout сидела сверху Из этого. Тогда в моем коде я просто установил источник изображения через удаленный просмотр, и он работал как удовольствие.

Не самый элегантный / эффективный способ кодирования, но он сработал!