我想在图像选择器意图中添加删除选项,我成功添加了图库选项和相机选项,这些工作正常,但我想添加删除选项,如果我选择删除选项,图像应从imageview中删除.
提前致谢 :)
我的代码:
public void edit_profile_pic(View view) {
Uri uri = null;
Intent GalleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent CameraIntent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
CameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
Intent chooserIntent = Intent.createChooser(CameraIntent, "Choose");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {GalleryIntent, CameraIntent});
startActivityForResult(chooserIntent, RESULT_LOAD_IMG);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
ImageView imageView = (ImageView) findViewById(R.id.profile_profile_picture);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
{
Bitmap bitmap = null;
if(data.getData()!=null)
{
try
{
InputStream stream = getContentResolver().openInputStream(data.getData());
bitmap = BitmapFactory.decodeStream(stream);
stream.close();
imageView.setImageBitmap(bitmap);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
bitmap=(Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(bitmap);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
Run Code Online (Sandbox Code Playgroud)
通过创建一个主题为NoDisplay的新活动,我能够通过意图选择器执行此操作:
首先创建将用于通知主要活动用户想要删除图像的活动:
public class DeleteProfileImageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent resultIntent = new Intent();
resultIntent.putExtra("remove_image", true);
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在清单中指定图标和标签.确保您还将主题设置为NoDisplay,以避免它使用意图选择器覆盖实际活动.
<activity
android:name=".activity.profilesetup.DeleteProfileImageActivity"
android:label="@string/title_activity_delete_profile_image"
android:icon="@drawable/ic_delete_image_red"
android:theme="@android:style/Theme.NoDisplay"
/>
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其添加到意图选择器.我检查图像是否先前已设置,以避免在没有图像时添加选项.
if (imageSet) {
Intent removeImageIntent = new Intent(activity, DeleteProfileImageActivity.class);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {removeImageIntent} );
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用DeleteProfileImageActivity当前指定的密钥监听目标数据的活动结果remove_image
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data.hasExtra("remove_image") && imageSet) {
// remove/reset the image here
}
}
Run Code Online (Sandbox Code Playgroud)