web-dev-qa-db-fra.com

Comment créer un dialogue d'alerte personnalisé dans Android?

Je suis en train de développer un exemple d'application.Je peux afficher une alerte sur un clic de bouton avec un titre et un bouton .Maintenant, je souhaite afficher une fenêtre contextuelle contenant nom d'utilisateur (libellé) et un champ de texte (champ d'édition) ainsi qu'un button . on click on button.can je crée un autre fichier XML contextuel pour cela?

public void selfDestruct(View view) {
         // Kabloey
         Log.d("Naveen", "Test====");
         System.out.println("----------------------ghfgjhf-----------------");
         AlertDialog alertDialog = new AlertDialog.Builder(SecondActivity.this).create();
         alertDialog.setTitle("Reset...");
         alertDialog.setMessage("R u sure?");
         alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {

               //here you can add functions

            } });
         alertDialog.show();
     }

   <Button
     Android:layout_height="wrap_content"
     Android:layout_width="wrap_content"
     Android:text="@string/self_destruct"
     Android:onClick="selfDestruct" />
18
user1542984

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >


    <EditText
        Android:id="@+id/editText"
        Android:hint="Enter some thing"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" >

    <requestFocus />
    </EditText>

    <LinearLayout                
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"   
        Android:layout_marginTop="10dp">     

        <Button
            Android:id="@+id/save"
            Android:layout_marginTop="15dp"
            Android:layout_weight="1"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="SAVE" />

        <Button
            Android:id="@+id/cancel"
            Android:layout_marginTop="15dp"
            Android:layout_weight="1"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="Cancel" />

    </LinearLayout>
</LinearLayout>

Besoin de gonfler custom_dialog.xml

final Dialog dialog = new Dialog(this);

dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Alert Dialog");

final EditText editText = (EditText) dialog.findViewById(R.id.editText);
Button btnSave          = (Button) dialog.findViewById(R.id.save);
Button btnCancel        = (Button) dialog.findViewById(R.id.cancel);
dialog.show();
30
Amit Gupta

Vous pouvez créer une activité normale et paramétrer la boîte de dialogue Android:theme sur:

   <activity
        Android:name="com.example.carsharingkitdemo.YourPopUpActivity"
        Android:theme="@Android:style/Theme.Holo.Dialog" >
    </activity>

et dans votre fichier xml pour cette activité, vous pouvez décider de la hauteur et de la largeur de ce champ de dialogue. Par exemple:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="300dp"
Android:layout_height="100dp">

La chose importante est la partie manifeste.

4
silvia_aut
3
Evgeni Roitburg

vous pouvez utiliser Dialog , comme ce code: 

final Dialog dialog = new Dialog(context);
// dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom);
dialog.setTitle("Title...");

// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();

si vous voulez supprimer title bar utilisez simplement ce code après avoir défini 

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
2
Bashar Staifan

ça marche pour moi

Dialog m_dialog; 
m_dialog = new Dialog(BusinessDetail.this);
            m_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

            LayoutInflater m_inflater = LayoutInflater.from(BusinessDetail.this);
            View m_view = m_inflater.inflate(R.layout.rateus_popup, null);
            myPopLay = (LinearLayout) m_view.findViewById(R.id.myPopLay);
m_dialog.setContentView(m_view);
            m_dialog.show();
1
madhu sudhan

Voici le code xml et le code d'activité le voir.

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/text"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_centerHorizontal="true"
        Android:layout_marginTop="56dp"
        Android:text="Popup Window will display on this Activity" />

    <Button
        Android:id="@+id/popupbutton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:layout_centerVertical="true"
        Android:text="Show Popup" />

</RelativeLayout>

Fiche d'activité 

package com.nkm.popup;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup.LayoutParams;
import Android.widget.Button;
import Android.widget.LinearLayout;
import Android.widget.PopupWindow;
import Android.widget.TextView;

public class PopupDemoActivity extends Activity implements OnClickListener {
LinearLayout layoutOfPopup;
PopupWindow popupMessage;
Button popupButton, insidePopupButton;
TextView popupText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    init();
    popupInit();
}

public void init() {
    popupButton = (Button) findViewById(R.id.popupbutton);
    popupText = new TextView(this);
    insidePopupButton = new Button(this);
    layoutOfPopup = new LinearLayout(this);
    insidePopupButton.setText("OK");
    popupText.setText("This is Popup Window.press OK to dismiss         it.");
    popupText.setPadding(0, 0, 0, 20);
    layoutOfPopup.setOrientation(1);
    layoutOfPopup.addView(popupText);
    layoutOfPopup.addView(insidePopupButton);
}

public void popupInit() {
    popupButton.setOnClickListener(this);
    insidePopupButton.setOnClickListener(this);
    popupMessage = new PopupWindow(layoutOfPopup, LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    popupMessage.setContentView(layoutOfPopup);
}

@Override
public void onClick(View v) {

    if (v.getId() == R.id.popupbutton) {
        popupMessage.showAsDropDown(popupButton, 0, 0);
    }

    else {
        popupMessage.dismiss();
    }
  }
}
1
Jitesh Dalsaniya

Essaye ça...

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Reset...").setView(editText)
   .setMessage("R u sure?").setCancelable(true)
   .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int arg1) {
        //Do here whatever.....
    }
});
AlertDialog alert = builder.create();
alert.show();
}
1
Ankit

Utilisez le codage ci-dessous pour afficher une fenêtre contextuelle dans Android. 

AlertDialog.builder builder=new AlertDilaog.Builder(this);
    builder.setMessage("PopUP Example");
    AlertDialog alert=builder.create();
    alert.setTitle("");
    alert.show();

    new Handler.postDelayed(new Runnable()
    {
    @override
    public void run()
    {
  //TODO
    alert.dismiss();
    }
    },1*1000);
    }

Lien Youtube: https://www.youtube.com/watch?v=SEsVTTl6exg

0
Kanagalingam

Nous allons utiliser la classe PopupWindow pour créer le popup.

Une chose que je voudrais mentionner est que nous voulons que la fenêtre contextuelle soit attachée au bouton qui l’a ouvert. Par exemple, si le bouton «Afficher le menu contextuel» de la capture d'écran ci-dessus est positionné au milieu de l'écran, nous voulons que la fenêtre contextuelle reste collée à la position du bouton. Pour y parvenir, nous devons d’abord afficher les positions «x» et «y» du bouton à l’écran, puis les passer à la fenêtre contextuelle. Nous allons ensuite utiliser un décalage pour aligner correctement la fenêtre contextuelle - un peu à droite et un peu vers le bas, afin de ne pas recouvrir tout le bouton.

Une autre idée que je voudrais mentionner est que nous allons utiliser une image d’arrière-plan de 9 correctifs pour la fenêtre contextuelle, ce qui donnera un aspect plus élégant. Mais bien sûr, vous pouvez le sauter et mettre n'importe quel fond, ou aucun fond.

Créez le fichier layout/main.xml et ajoutez un bouton:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#CCC"
Android:orientation="vertical" >

<Button
   Android:id="@+id/show_popup"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="Show Popup" />

</LinearLayout>

Créez un nouveau fichier de présentation: layout/popup_layout.xml qui définit la présentation de la popup.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:layout_width="wrap_content"
   Android:id="@+id/popup"
   Android:layout_height="wrap_content"
   Android:background="@drawable/popup_bg"
   Android:orientation="vertical" >

<TextView
   Android:id="@+id/textView1"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="Popup"
   Android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
   Android:id="@+id/textView2"
   Android:layout_marginTop="5dp"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="This is a simple popup" />

<Button
   Android:id="@+id/close"
   Android:layout_marginTop="10dp"
   Android:layout_gravity="center_horizontal"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="Close" />

</LinearLayout>

Et maintenant la partie la plus intéressante. Ouvrez TestPopupActivity et remplissez-le avec le code ci-dessous. Lisez attentivement les commentaires pour comprendre ce qui se passe.

 public class TestPopupActivity extends Activity {

//The "x" and "y" position of the "Show Button" on screen.
Point p;

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   Button btn_show = (Button) findViewById(R.id.show_popup);
   btn_show.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View arg0) {

       //Open popup window
       if (p != null)
       showPopup(TestPopupActivity.this, p);
     }
   });
}

// Get the x and y position after the button is draw on screen
// (It's important to note that we can't get the position in the onCreate(),
// because at that stage most probably the view isn't drawn yet, so it will return (0, 0))
@Override
public void onWindowFocusChanged(boolean hasFocus) {

   int[] location = new int[2];
   Button button = (Button) findViewById(R.id.show_popup);

   // Get the x, y location and store it in the location[] array
   // location[0] = x, location[1] = y.
   button.getLocationOnScreen(location);

   //Initialize the Point with x, and y positions
   p = new Point();
   p.x = location[0];
   p.y = location[1];
}

// The method that displays the popup.
private void showPopup(final Activity context, Point p) {
   int popupWidth = 200;
   int popupHeight = 150;

   // Inflate the popup_layout.xml
   LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup);
   LayoutInflater layoutInflater = (LayoutInflater) context
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   View layout = layoutInflater.inflate(R.layout.popup_layout, viewGroup);

   // Creating the PopupWindow
   final PopupWindow popup = new PopupWindow(context);
   popup.setContentView(layout);
   popup.setWidth(popupWidth);
   popup.setHeight(popupHeight);
   popup.setFocusable(true);

   // Some offset to align the popup a bit to the right, and a bit down, relative to button's position.
   int OFFSET_X = 30;
   int OFFSET_Y = 30;

   // Clear the default translucent background
   popup.setBackgroundDrawable(new BitmapDrawable());

   // Displaying the popup at the specified location, + offsets.
   popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);

   // Getting a reference to Close button, and close the popup when clicked.
   Button close = (Button) layout.findViewById(R.id.close);
   close.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
       popup.dismiss();
     }
   });
}
}
0
vicky mahale