2016-05-23 1 views
1

J'ai l'activité principale dans laquelle j'ai peu de boutons de menu. Lorsque l'utilisateur appuie sur le bouton spécifique, je veux ouvrir un nouveau activity qui ont aussi quelques boutons dont j'ai besoin pour gérer leur clic. En d'autres termes, j'ai besoin de faire apparaître la fonctionnalité de la fenêtre comme une activité normale.
J'ai regardé en ligne et trouvé plusieurs façons d'implémenter ceci comme: juste en personnalisant la taille du activity, utilisez le thème de diaglog dans le manifeste, l'employez comme fragment ou employez la classe Popup Window. Mais comme je suis nouveau à Android, je veux la meilleure façon de l'implémenter pour mon projet.
Quelqu'un peut-il m'aider à atteindre cet objectif?meilleure façon d'implémenter la fenêtre pop-up dans l'application android

EDIT: c'est le fichier xml que je veux utiliser dans la fenêtre pop-up (pour une meilleure explication de ce que je veux réaliser):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    android:background="#0091cb" 
    android:padding="16dp"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:paddingTop="@dimen/activity_horizontal_margin" 
     android:weightSum="3" 
     android:id="@+id/check"> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/computer" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button1" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:onClick="button1_OnClick"/> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/electrical" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button2" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:onClick="button2_OnClick"/> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/hdtv" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button3" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:onClick="button3_OnClick"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/activity_horizontal_margin" 
     android:orientation="horizontal" 
     android:layout_below="@id/check" 
     android:paddingTop="10dp"> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/bill" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button4" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button4_OnClick"/> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:layout_marginLeft="10dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/water" 
      android:paddingTop="12dp" 
      android:text="button5" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button5_OnClick" /> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:layout_marginLeft="10dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/electrical" 
      android:paddingTop="12dp" 
      android:text="button6" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button6_OnClick" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/activity_horizontal_margin" 
     android:orientation="horizontal"> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:layout_marginLeft="10dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/notepad" 
      android:paddingTop="7dp" 
      android:text="button7" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button7_OnClick" /> 
     </LinearLayout> 
</LinearLayout> 
+2

vous pouvez regarder ici https://developer.android.com/reference/android/widget/PopupWindow.html et la recherche sur stackoverflow – okarakose

+0

merci. A partir de la recherche que j'ai faite, j'ai découvert ces façons: juste en personnalisant la taille de l'activité, utilisez le thème diaglog dans le manifeste, utilisez-le comme un fragment ou utilisez la classe Popup Window. mais je ne suis pas sûr de ce qui est le meilleur moyen pour ce que je veux –

+0

Utilisez cette méthode pour ouvrir la fenêtre popup.Cette méthode que j'ai utilisée dans mon app.j'espère que vous aussi. –

Répondre

0

créer méthode où tu veux ouvrir popup windiw dans votre activité Comme ceci, p est un point spécifique où vous voulez exactement ouvrir votre fenêtre.

final Point p = new Point(); 
    show_popup.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       showpopupwindows(Activity, p); 

      } 
     }); 

puis,

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    int location[] = new int[2]; 

    show_popup.getLocationOnScreen(location); 
    p.x = location[0]; 
    p.y = location[1]; 
} 

private void showpopupwindows(final Activity context, Point p) { 

    LinearLayout viewGroup = (LinearLayout) context 
      .findViewById(R.id.popup_menu); 

    LayoutInflater layoutInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


    Display display = context.getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 

    int popupwidth = (size.x/2); 
    int popupheight =(size.y/2); 

    View layout = layoutInflater.inflate(R.layout.detail_pop, viewGroup); 

    final PopupWindow popup = new PopupWindow(context); 

    popup.setContentView(layout); 
    popup.setWidth(popupwidth); 
    popup.setHeight(popupheight); 
    popup.setFocusable(true); 
    popup.setAnimationStyle(R.style.WindowAnimation); 
    popup.setBackgroundDrawable(new ColorDrawable(
      android.graphics.Color.TRANSPARENT)); 

    popup.showAtLocation(layout, Gravity.NO_GRAVITY, popupwidth,popupheight); 

    detail_pop1 = (TextView) layout.findViewById(R.id.detail_pop1); 

    detail_pop1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getContext(), "pop window is opened, Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

detail_pop.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/popup_menu" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:background="@color/skyblue" 
    android:gravity="center" 
    android:orientation="vertical" 
    > 

    <TextView 
     android:id="@+id/detail_pop1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:layout_weight="1" 
     android:drawableTop="@drawable/ic_launcher" 
     android:gravity="center" 
     android:text="P" 
     android:textSize="@dimen/font_24" /> 


</LinearLayout> 
+0

Ici, dans mon code, le nom de ma mise en page est detail_pop mais vous pouvez donc écrire votre nom de mise en page et donner un identifiant à tous les boutons, puis définir comme vous pouvez définir, Button = (Button) layout.findViewById (R.id.Button); alors quoi que vous fassiez au bouton, vous pouvez faire comme je le fais. –

+0

à quoi servent ces objets: LinearLayout viewGroup = (LinearLayout) context .findViewById (R.id.popup_menu); Mise en pageInflater layoutInflater = (LayoutInflater) context .getSystemService (Context.LAYOUT_INFLATER_SERVICE); et votre point vide showPopUpWindow() en passant, son inisialized dans le onWindowFocusChanged(). Pouvez-vous expliquer la logique de la façon dont cela fonctionne? –

+0

ici popup_menu est l'id d'une disposition linéaire principale. Donnez-vous id à votre disposition linéaire principale.initiallly je viens de définir le point mais dans methos je décris l'emplacement de point.plz voir attentivement.je suggérer tout d'abord u mettre en œuvre toute la méthode.puis Faites quelques changements dans votre projet. –

0

en fonction de vos besoins.
Si vous avez juste besoin d'afficher une fenêtre contextuelle 'classique' (erreur lors de la saisie dans le champ de saisie ou dans le petit sélecteur de couleur) - utilisez la classe PopupWindow. Vous pouvez utiliser my gist.
Si votre message est plus général (par exemple, «Il n'y a pas de connexion Internet») ou si l'utilisateur doit choisir le dialogue oui/non-utiliser. Il y a cool library.
L'activité avec une taille personnalisée est rarement utilisée. Peut-être dans certaines applications de numérotation. Alors choisissez la mise en œuvre dépend de vos besoins.

+0

mon besoin est de le gérer comme une activité normale, maintenant pour afficher un message ou une alerte.dans l'activité que je veux montrer comme une pop-up j'ai des boutons que je dois gérer leurs événements de clics avec des fonctions dans leur activité –

+0

@ A.T vous pouvez avoir des boutons dans votre mise en page contextuelle en utilisant l'une de ces façons – rocknow