Boîte De Dialogue D'Image Android / Popup

Est-il possible d'avoir juste une image popup/viennent dans une application Android? C'est similaire à un dépassement de la vue normale D'un AlertDialog afin qu'il ne contienne qu'une image et rien d'autre.

SOLUTION: j'ai pu trouver une réponse grâce à l'aide de @blessenm. Masquer une activité en tant que dialogue semble être le moyen idéal. Voici le code que j'ai utilisé. Cette activité de style de dialogue peut être appelée au besoin par l'application de la même manière qu'une nouvelle l'activité serait lancée

ImageDialog.java

public class ImageDialog extends Activity {

    private ImageView mDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_dialog_layout);



        mDialog = (ImageView)findViewById(R.id.your_image);
        mDialog.setClickable(true);


        //finish the activity (dismiss the image dialog) if the user clicks 
        //anywhere on the image
        mDialog.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
        });

    }
}

Your_dialog_layout.xml

<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image_dialog_root" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:gravity = "center">

    <ImageView
        android:id="@+id/your_image"  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src = "@drawable/your_image_drawable"/>

</FrameLayout>

Il est crucial que vous définissiez le style suivant pour l'activité pour y parvenir:

Styles.xml

  <style name="myDialogTheme" parent="@android:style/Theme.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowContentOverlay">@null</item>
   </style>

La dernière étape est de déclarer ce style pour l'activité dans le manifeste comme suit:

 <activity android:name=".ImageDialog" android:theme="@style/myDialogTheme" />
36
demandé sur Abhijit 2011-10-08 03:02:17

6 réponses

Si vous voulez juste utiliser une boîte de dialogue notmal, quelque chose comme ça devrait fonctionner

Dialog settingsDialog = new Dialog(this);
settingsDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
settingsDialog.setContentView(getLayoutInflater().inflate(R.layout.image_layout
        , null));
settingsDialog.show();

Image_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:orientation="vertical">
    <ImageView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:src="YOUR IMAGE"/>
    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="OK" android:onClick="dismissListener"/>
</LinearLayout>
31
répondu blessenm 2011-10-08 01:06:53

Pas de xml:

public void showImage() {
    Dialog builder = new Dialog(this);
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
    builder.getWindow().setBackgroundDrawable(
        new ColorDrawable(android.graphics.Color.TRANSPARENT));
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialogInterface) {
            //nothing;
        }
    });

    ImageView imageView = new ImageView(this);
    imageView.setImageURI(imageUri);
    builder.addContentView(imageView, new RelativeLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, 
            ViewGroup.LayoutParams.MATCH_PARENT));
    builder.show();
}
51
répondu WhereDatApp.com 2014-07-25 00:55:02

Il y a deux façons de le faire. Mais, si vous cherchez à avoir votre image semble flotter au-dessus de votre activité existante, vous pouvez utiliser une activité avec android:theme="@style/Theme.Transparent " défini dans le manifeste. Ensuite, concevez votre mise en page pour qu'une seule ImageView soit positionnée au centre de l'écran. L'Utilisateur devra appuyer sur le bouton Retour pour sortir de cela, mais il semble que c'est ce que vous voulez.

Si vous voulez qu'il ressemble à un réel dialogue, vous pouvez toujours utiliser une activité de style de dialogue ainsi en utilisant le thème.Dialogue. Ou, vous pouvez simplement utiliser une boîte de dialogue et la personnaliser.

1
répondu SBerg413 2011-10-07 23:19:39

La manière la plus flexible et la plus recommandée est D'utiliser DialogFragment. Si vous souhaitez prendre en charge les versions antérieures à 3.0, vous pouvez utiliser la bibliothèque de compatibilité

1
répondu jperera 2011-10-07 23:51:31

Sans utiliser Dialog, vous pouvez utiliser cette bibliothèque pour faire apparaître l'image très facilement.

Https://github.com/chathuralakmal/AndroidImagePopup

1
répondu Im Batman 2017-01-11 02:54:19

Essayez ce qui suit:
Il a aussi l'image zoom_in / zoom_out.

Étape 1:
Ajouter compile 'com.github.chrisbanes.photoview:library:1.2.4' à votre build.gradle
Étape 2:
Ajouter le xml suivant


Custom_fullimage_dialoge.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root" android:orientation="horizontal"
              android:layout_width="fill_parent" android:layout_height="fill_parent"
              android:padding="10dp">
    <ImageView android:id="@+id/fullimage" android:layout_width="fill_parent"
               android:layout_height="fill_parent">
    </ImageView>

    <TextView android:id="@+id/custom_fullimage_placename"
              android:layout_width="wrap_content" android:layout_height="fill_parent"
              android:textColor="#FFF">
    </TextView>
</LinearLayout>

Étape 3:

private void loadPhoto(ImageView imageView, int width, int height) {

    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    //dialog.setContentView(R.layout.custom_fullimage_dialog);
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.custom_fullimage_dialog,
            (ViewGroup) findViewById(R.id.layout_root));
    ImageView image = (ImageView) layout.findViewById(R.id.fullimage);
    image.setImageDrawable(imageView.getDrawable());
    image.getLayoutParams().height = height;
    image.getLayoutParams().width = width;
    mAttacher = new PhotoViewAttacher(image);
    image.requestLayout();
    dialog.setContentView(layout);
    dialog.show();

}

Étape 4:

user_Image.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Display display = getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
        loadPhoto(user_Image,width,height);
    }
});
0
répondu Vakas 2017-10-13 05:26:07