J'ai été en mesure de changer la couleur d'un fond d'activité (voir ce post ). Maintenant, il est nécessaire de faire la même chose avec l'image d'arrière-plan. Je veux dire que je peux cliquer sur un bouton, sélectionner une option et changer l'image d'arrière-plan de l'activité en cours pour la nouvelle.
Voici ce que j'ai fait:
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();
Les modifications sont enregistrées et chargées à l’aide du code suivant:
//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();
}
L'image d'arrière-plan d'activité change lorsqu'elle est sélectionnée dans la liste de dialogue, MAIS la modification n'est pas enregistrée ni chargée lors de la prochaine relance de l'activité.
Je ne sais pas maintenant comment résoudre ce problème. Peux-tu aider s'il te plait? Merci beaucoup.
Lorsque vous définissez l'arrière-plan après avoir sélectionné Dialog
, vous obtenez l'ID de ressource R.drawable.pix2
et récupérez la BitmapDrawable
comme suit ...
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;
Mais dans la méthode onCreate()
, vous ne faites que transmettre l'ID de la ressource comme ci-dessous ...
wvContent.setBackgroundColor(getSelectedItem());
où, getSelectedItem()
renvoie une valeur int
qui est un identifiant de ressource.
Maintenant, définissez l’arrière-plan dessinable comme suit dans la méthode onCreate()
...
wvContent.setBackgroundColor(0);
BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(getSelectedItem());
bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
wvContent.setBackgroundDrawable(bg);
Vous pouvez mettre à jour l’arrière-plan depuis la SDCard comme suit.
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);
ajoutez ceci à votre activity.xml:
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/iso"
Android:id="@+id/background"
Android:scaleType="fitXY"
/>
ajoutez ceci à activity.Java:
ImageView layout = (ImageView) findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.iso);
webView.setBackgroundColor(0);
WebView.setBackgroundResource(R.drawable.yourImage);
utilisez ce code ci-dessus, cela peut vous aider ....