2011-02-06 100 views
1

在我的drawable-hdpi文件夾中,我有4個圖像文件(.png)作爲awidget的背景。默認情況下,爲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(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

假設你媒體鏈接有LinearLayout屏幕(使用setContentView)上,你可以很容易地更改背景,像這樣:

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

(並獲得使用findViewById() ofcourse該佈局)

+0

看起來不錯。並在哪裏把這個代碼?我把它放在EditPreferences.java(它擴展了PreferenceActivity),但它不工作(只有當我第一次點擊我的「設置」btn時纔會出現烤麪包,但如果我再次單擊它並選擇另一種顏色,則不會有烤麪包味精。 我也有MainActivity.java的活動和UpdateService.java的部件。我試圖把UpdateService.java的onCreate方法,不工作要麼。 – erdomester 2011-02-06 09:56:06