Wie man ein Hintergrundbild eines Android Aktivität programmgesteuert ändern

? Niamh Doyle @ | Original: StackOverFlow
---

Ich habe in der Lage, Farb einer Aktivität Hintergrund (siehe http://stackoverflow.com/questions/22574678/how-to-change-background-colour-of-an-android-activity ) ändern. Jetzt eine Anforderung ist, um dieselbe mit Hintergrundbild zu tun. Ich meine, ich kann auf eine Schaltfläche klicken, wählen Sie eine Option, und ändern Sie das aktuelle Bild Activity Hintergrund für die neue.

Hier ist, was ich getan habe :

private SharedPreferences prefs;    
private static final String SELECTED_ITEM = "SelectedItem"; 
private Editor sharedPrefEditor;

btnchangeColor = (ImageButton) findViewById(R.id.btnchangeColor);
btnchangeColor.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    final CharSequence[] items={getString(R.string.default),getString(R.string.pix1), getString(R.string.pix2))};
    AlertDialog.Builder builder = new AlertDialog.Builder(
            ContentView.this);

    builder.setTitle((getResources().getString(R.string.color_switch)));
    builder.setPositiveButton((R.string.ok), new DialogInterface.OnClickListener() { 

        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });

    builder.setSingleChoiceItems(items, getSelectedItem(), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {                
            wvContent = (WebView) findViewById(R.id.wvContent);             
            int bg_color=0;

            if(getString(R.string.default).equals(items[which]))
            {                   
                wvContent.setBackgroundColor(0);
                BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.default);
                bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
                wvContent.setBackgroundDrawable(bg);                    
                bg_color=R.drawable.default; 
            }
            else if(getString(R.string.pix1).equals(items[which]))
            {
                wvContent.setBackgroundColor(0);
                BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.pix1);
                bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
                wvContent.setBackgroundDrawable(bg);                    
                bg_color=R.drawable.pix1;
                }
            else if(getString(R.string.pix2).equals(items[which]))
            {
                wvContent.setBackgroundColor(0);
                BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.pix2);
                bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
                wvContent.setBackgroundDrawable(bg);                    
                bg_color=R.drawable.pix2;                   
                }               
            saveSelectedItem(bg_color);
        }
    });
    builder.show();

Änderungen werden gespeichert und mit dem folgenden Code geladen wird :

//OnCreate
wvContent = (WebView) findViewById(R.id.wvContent); 
wvContent.setBackgroundColor(getSelectedItem());
...
private int getSelectedItem() {
    if (prefs == null) {
        prefs = PreferenceManager
                .getDefaultSharedPreferences(this);
    }
    return prefs.getInt(SELECTED_ITEM, -1);
}

private void saveSelectedItem(int which) {
    if (prefs == null) {
        prefs = PreferenceManager
                .getDefaultSharedPreferences(this);
    }
    sharedPrefEditor = prefs.edit();
    sharedPrefEditor.putInt(SELECTED_ITEM, which);
    sharedPrefEditor.commit();
}

Die Aktivität Hintergrundbild hat ändern, wenn es aus der Liste Dialog, aber die Änderung wird nicht gespeichert und geladen werden beim nächsten Mal, wenn die Aktivität wieder aufgenommen .

Ich habe jetzt keine Ahnung, wie dieses Problem zu lösen . Können Sie mir bitte helfen? Schönen Dank.

---

Top 5 Antwort

1mohammad rababah @

fügen Sie diese zu Ihrer activity.xml :

<ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/iso"
        android:id="@+id/background"
        android:scaleType="fitXY"
        />

fügen Sie diese zu activity.java :

ImageView layout = (ImageView) findViewById(R.id.background);
            layout.setBackgroundResource(R.drawable.iso);
2prakash @
webView.setBackgroundColor(0);
WebView.setBackgroundResource(R.drawable.yourImage);

Mit dieser Code oben, kann diese Ihnen helfen ....

3Hamid Shatu @

Wenn Sie nach der Auswahl von Hintergrund Dialog, dann sind Sie immer die Ressource -ID R.drawable.pix2 und Abrufen Einstellung der BitmapDrawable wie folgt ...

wvContent.setBackgroundColor(0);
BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.pix2);
bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
wvContent.setBackgroundDrawable(bg);                    
bg_color=R.drawable.pix2;

Aber in onCreate() Verfahren Sie nur auf der die Ressource -ID wie folgt ...

wvContent.setBackgroundColor(getSelectedItem());

wo getSelectedItem() gibt eine int Wert, der eine Ressource -ID ist .

Nun setzen Hintergrund ziehfähig wie im Verfahren onCreate() folgt ...

wvContent.setBackgroundColor(0);
BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(getSelectedItem());
bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
wvContent.setBackgroundDrawable(bg);

Sie können Hintergrund von SDCard wie folgt aktualisieren ...

    String pathName = Environment.getExternalStorageDirectory().getPath() + "/folder/" + "image.jpg";
    Resources res = getResources(pathName);
    Bitmap bitmap = BitmapFactory.decodeFile(pathName);
    BitmapDrawable backgroundDrawable = new BitmapDrawable(res, bitmap);
    wvContent.setBackgroundDrawable(backgroundDrawable);