【问题标题】:How to programmatically change the background image of an Android Activity如何以编程方式更改 Android Activity 的背景图像
【发布时间】:2014-05-01 10:34:48
【问题描述】:

我已经能够更改活动背景的颜色(请参阅this post)。现在一个要求是对背景图像做同样的事情。我的意思是我可以单击一个按钮,选择一个选项并将当前的 Activity 背景图像更改为新的。

这是我所做的:

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 列表中选择 Activity 背景图像时,它确实会发生变化,但是下次重新启动 Activity 时不会保存和加载更改。

我现在不知道如何解决这个问题。你能帮忙吗?非常感谢。

【问题讨论】:

  • 请向我解释一下,您希望从用户端更改图像?当用户需要时,他会更改图像??我正确吗?
  • 是的。这是一种阅读材料,用户可能希望更改背景以满足他们的视力需求。
  • 好的,那么你需要将该图像放入 sdcard..当用户需要更改图像时,他只能更改或替换他的 sdcard 中的图像..所以我的意思是图像将是从客户端改变..你能明白我的意思吗,对不起我的英语..
  • 这可能是下一步。此时,我只关注如何保存和保留背景更改,以便下次启动应用(或活动)时,背景图像仍然存在。
  • 这是建议,请尝试让我知道它是否有效...在您的 saveSelectedItem(int which) 方法中,请删除以下行并在 onCreate 方法中实现请尝试... . if (prefs == null) { prefs = PreferenceManager .getDefaultSharedPreferences(this); }

标签: java android android-layout sharedpreferences


【解决方案1】:

将此添加到您的 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);

【讨论】:

  • 如果用户愿意,如何使用它来改变背景?
  • ImageView 设置为活动背景时
【解决方案2】:
webView.setBackgroundColor(0);
WebView.setBackgroundResource(R.drawable.yourImage);

使用上面的代码,可能对你有帮助....

【讨论】:

    【解决方案3】:

    当您从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() 返回一个 int 值,它是一个资源 ID。

    现在,在onCreate()方法中设置背景drawable如下...

    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);
    

    【讨论】:

    • @HS 这就是我所说的。为您的真棒答案 +1
    • 这似乎是最合乎逻辑的。我已经尝试过您的指示,但没有运气。 Activity 重新启动后仍显示其默认背景。
    • 从 sdcard 中选择图片试试下面的代码... String pathName = "/sdcard/nogastorebgimage.png";资源 res = getResources();位图位图 = BitmapFactory.decodeFile(pathName); BitmapDrawable bd = new BitmapDrawable(res, bitmap);相对布局 rl_main = (RelativeLayout) findViewById(R.id.rl_main); rl_main.setBackgroundDrawable(bd);
    • @HamidShatu +1 我的好答案 :)
    • @NiamhDoyle ...我想,这个链接会帮助你更多:viralpatel.net/blogs/pick-image-from-galary-android-app
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2017-08-14
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多