読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

ウィジェットの背景色を動的に変更する

Android


ウィジェットの背景色を変更にするには次のようにします。

RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.main);
view.setInt(R.id.layout, "setBackgroundColor", Color.RED);


しかし、この方法では2.1以前でエラーになるためウィジェットが正しく表示されません。
色々と調べたり試したりした結果、次のような感じになりました。


まずはレイアウトを次のようにします。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:id="@+id/widget_background_black"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#000000"
        android:visibility="gone">
    </LinearLayout>
    <LinearLayout
        android:id="@+id/widget_background_red"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FF0000"
        android:visibility="gone">
    </LinearLayout>
    <LinearLayout
        android:id="@+id/widget_background_green"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#00FF00"
        android:visibility="gone">
    </LinearLayout>
    <LinearLayout
        android:id="@+id/widget_background_blue"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#0000FF"
        android:visibility="gone">
    </LinearLayout>
    <TextView
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"/>
</RelativeLayout>


Javaのソースはこんな感じです。

RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.main);
view.setViewVisibility(R.id.widget_background_red, View.VISIBLE);


RelativeLayoutで重なることを利用して、LinearLayoutで色を設定しておき表示・非表示で背景色を変更している感じです。
調べてたらImageViewとかを使ってたりしてる記事も見かけたのですが、画像を作るのが面倒な時にはこっちのほうが楽だと思います。


そろそろAndroid以外の記事も書きたいけど、ネタがないなぁ・・・