簡體   English   中英

如何在 Android 中以編程方式更改小部件布局背景

[英]How to change widget layout background programmatically in Android

以這個小部件布局為例(我的整個小部件布局的一部分)

<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)

你試過了嗎:

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

好的,我最終能想到的唯一解決方案是改變我在 LinearLayout 中顯示背景圖像的方式。 正如您在上面看到的,我使用 android:background 標簽來顯示圖像。 我最終做的是我刪除了它,然后將我的整個小部件布局(它位於相對布局內的線性布局內。然后我只在 RelativeLayout 中首先貼上了 ImageView ,然后將小部件線性布局的 rest 放在頂部然后在我的代碼中,我只是通過遠程視圖設置了 imageview 源,它就像一種享受。

不是最優雅/最有效的編碼方式,但它有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM