1

背景画像を設定したアプリケーションを作成しました。ここで、ギャラリーから画像を選択して、アプリケーションの背景として設定したいと考えています。この部分はできています。ただし、アプリケーションを再度開くとデフォルトの画像が設定されるため、この選択した画像をアプリケーションの背景に永続的に設定することも必要です。

再度変更するまで、選択した画像を永続的に保存するにはどうすればよいですか?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bn= (Button) findViewById(R.id.button);
    SharedPreferences sp = getSharedPreferences("student", MODE_PRIVATE);
    final SharedPreferences.Editor spedit = sp.edit();
    v = R.drawable.back;
    spedit.putInt("background", v);
    RelativeLayout bg = (RelativeLayout) findViewById(R.id.abc);
    bg.setBackgroundResource(v);

    bn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(i, 101);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 101 && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();
        bitmap = BitmapFactory.decodeFile(picturePath);
        Drawable d = new BitmapDrawable(getResources(),bitmap);
        RelativeLayout bg = (RelativeLayout) findViewById(R.id.abc);
        bg.setBackground(d);
    }
}

アプリを初めて実行したときにデフォルトの背景が表示され、背景を変更すると、その画像がさらに起動したときに表示されるようにしたいと考えています。

4

2 に答える 2

1

以下では、画像アドレスを共有設定に割り当てました。その後、oncreate セクションで、アドレスが有効かどうかを確認しました。それに従って、背景を変更しました。

 SharedPreferences sp; 
 @Override protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bn= (Button) findViewById(R.id.button);
            sp = getSharedPreferences("student", MODE_PRIVATE); 
             String savedPicturePath = sp.getString("imagepath","null");
             if(!savedPicturePath.equals("null"){
             bitmap = BitmapFactory.decodeFile(savedPicturePath);
                Drawable d = new BitmapDrawable(getResources(),bitmap);
                RelativeLayout bg = (RelativeLayout) findViewById(R.id.abc);
                bg.setBackground(d);
            }
            bn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                    startActivityForResult(i, 101);

                }
            });


        }

            @Override
                  protected void onActivityResult(int requestCode, int resultCode,    Intent data) {
                super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == 101 && resultCode == RESULT_OK && null != data) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };

                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String picturePath = cursor.getString(columnIndex); 
                sp.edit().putString("imagepath",picturePath);
                cursor.close();
                bitmap = BitmapFactory.decodeFile(picturePath);
                Drawable d = new BitmapDrawable(getResources(),bitmap);
                RelativeLayout bg = (RelativeLayout) findViewById(R.id.abc);
                bg.setBackground(d);


            }


        }

        }
于 2016-01-07T16:01:45.063 に答える
-1

ユーザーが画像をクリックすると、 onActivityResult で画像パスを取得し、それを SharedPreferences に保存します。次回は保存された値を取得し、バックグラウンド リソースをそれに設定します。簡単。ヒント: 表示されるエラーは、SharedPreferences を宣言していないためです。以下のように宣言できます: SharedPreferences a = context.getSharedPreferences ("prefstring" , MODE_PRIVATE);

于 2016-01-07T19:08:12.077 に答える