アクティビティの背景の色を変更できました( この投稿 を参照)。今度は、背景画像に対して同じことをする必要があります。つまり、ボタンをクリックしてオプションを選択し、現在のアクティビティの背景画像を新しいものに変更できます。
これが私がやったことです:
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();
変更は、次のコードを使用して保存およびロードされます。
//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();
}
ダイアログのリストから選択した場合、アクティビティの背景画像は変更されますが、アクティビティが再起動されたときに変更が保存およびロードされません。
この問題を解決する方法は今のところわかりません。手伝ってくれませんか?どうもありがとう。
Dialog
から選択した後で背景を設定すると、リソースID _R.drawable.pix2
_を取得し、次のようにBitmapDrawable
を取得します...
_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;
_
しかし、onCreate()
メソッドでは、次のようにリソースIDを渡しています...
_wvContent.setBackgroundColor(getSelectedItem());
_
ここで、getSelectedItem()
は、リソースIDであるint
値を返します。
次に、onCreate()
メソッドで次のように背景ドローアブルを設定します...
_wvContent.setBackgroundColor(0);
BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(getSelectedItem());
bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
wvContent.setBackgroundDrawable(bg);
_
次のようにSDCardからバックグラウンドを更新できます...
_ 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);
_
これをactivity.xmlに追加します。
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/iso"
Android:id="@+id/background"
Android:scaleType="fitXY"
/>
これをactivity.Javaに追加します。
ImageView layout = (ImageView) findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.iso);
webView.setBackgroundColor(0);
WebView.setBackgroundResource(R.drawable.yourImage);
この上記のコードを使用してください、これはあなたを助けるかもしれません...