2011-02-06 14 views
1

私のdrawable-hdpiフォルダには、awidgetの背景となる4つの画像ファイル(.png)があります。デフォルトでは、LinearLayoutにはandroid:background = "@ drawable/goldgreenbg"が設定されています。ユーザーが背景を変更できるようにするための設定画面を作成しました。 どうすればいいですか?私はそれのためにこのコードを使用したいと思います:Androidセットのウィジェットの背景

 if (listpref.equals("color1")) 
      { 
      Toast.makeText(EditPreferences.this, "Black" + listpref, Toast.LENGTH_LONG).show(); 

      } 

else if (listpref.equals("color2")) 
      { 
       Toast.makeText(EditPreferences.this, "Brown" + listpref, Toast.LENGTH_LONG).show(); 
      } 

アップデート:私はこのコードを入れなければなら ? MainActivity.java:アクティビティ用 UpdateService.java:ウィジェット用 EditPreferences.java:設定用 Main.xmlにはlistviewが含まれ、widgetlayoutにはidが含まれています。

あなたが出回っ( setContentViewを使用)、画面に LinearLayoutを持って、あなたはそのように非常に簡単に背景を変更することができますと仮定
setContentView(R.layout.main); 
    preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    String listpref = preferences.getString("listPref", "n/a");    
    LinearLayout ll = (LinearLayout) findViewById(R.id.widgetlayout); 
    if (listpref.equals("color1")) 
    { 
     Toast.makeText(MainActivity.this, "Black" + listpref, Toast.LENGTH_LONG).show(); 
     ll.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackbg)); 
    } 
    else if (listpref.equals("color2")) 
    { 
     Toast.makeText(MainActivity.this, "Brown" + listpref, Toast.LENGTH_LONG).show(); 
     ll.setBackgroundDrawable(getResources().getDrawable(R.drawable.brownbg)); 
    } 

答えて

0

解決策を見つけました。

EditPreferences.java:それは完璧に働いている

final Preference listpref = getPreferenceScreen().findPreference("listPref"); 
     listpref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() 
     { 
     public boolean onPreferenceChange(Preference p, Object newValue) 
     { 
      String color = (String) newValue; 

      if (color.equals("color1")) 
      { 
       RemoteViews updateViews = new RemoteViews(EditPreferences.this.getPackageName(), R.layout.main); 
       updateViews.setTextColor(R.id.widget_textview, Color.rgb(208, 202, 202)); 
       updateViews.setTextColor(R.id.widget_textview2, Color.WHITE); 
       updateViews.setTextColor(R.id.widget_textview3, Color.rgb(176, 175, 175)); 
      // updateViews.setImageViewBitmap(R.id.ImageView01, ((BitmapDrawable)EditPreferences.this.getResources().getDrawable(R.drawable.forestbg)).getBitmap()); 
       updateViews.setImageViewResource(R.id.ImageView01, R.drawable.blacktrans);    
       ComponentName thisWidget = new ComponentName(EditPreferences.this, HelloWidget.class); 
       AppWidgetManager manager = AppWidgetManager.getInstance(EditPreferences.this); 
       manager.updateAppWidget(thisWidget, updateViews); 
} 
      else if (color.equals("color2")) 
      { 
       RemoteViews updateViews = new RemoteViews(EditPreferences.this.getPackageName(), R.layout.main); 
       updateViews.setTextColor(R.id.widget_textview, Color.rgb(23, 81, 11)); 
       updateViews.setTextColor(R.id.widget_textview2, Color.rgb(232, 232, 107)); 
       updateViews.setTextColor(R.id.widget_textview3, Color.rgb(23, 81, 11)); 
       updateViews.setImageViewBitmap(R.id.ImageView01, ((BitmapDrawable)EditPreferences.this.getResources().getDrawable(R.drawable.goldgreenbg)).getBitmap()); 
       // updateViews.setImageViewResource(R.id.ImageView01, R.drawable.goldgreenbgf);   
       ComponentName thisWidget = new ComponentName(EditPreferences.this, HelloWidget.class); 
       AppWidgetManager manager = AppWidgetManager.getInstance(EditPreferences.this); 
       manager.updateAppWidget(thisWidget, updateViews); 
    } 
    return true; 
     } 
     }); 
public void onStart(Intent intent, int startId) { 
      getPrefs(); 
} 
    private void getPrefs() { 
      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
      ListPreference = prefs.getString("listPref", "nr1"); 
    } 

この方法です。

1

yourLinearLayout.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackbg)); 

(およびfindViewById() ofcourseのを使用して、そのレイアウトを取得)

+0

いいね。そしてこのコードをどこに置くのですか?私はそれをEditPreferences.java(PreferenceActivityを拡張)に入れますが、動作しません(トーストは最初に自分の "設定" btnをクリックしたときにのみ表示されますが、もう一度クリックして別の色を選択するとmsgをスクロールしません)。 アクティビティ用のMainActivity.javaと、ウィジェット用のUpdateService.javaもあります。UpdateService.javaのonCreateメソッドを入れてみましたが、どちらも動作していません。 – erdomester

+0

あなたはその設定を保存していると仮定して、あなたの "setContentView()"コール – Nanne

+0

私はMainActivity.javaにコードを入れなければならないかどうか、UpdateService.javaにコードを入れなければならないかどうかはわかりません。 – erdomester