Dialogue temporaire modéré

Existe-t-il un moyen de montrer une boîte de dialogue sans modélisation – une boîte de dialogue qui permet à l'utilisateur d'interagir avec tout ce qui était sur l'écran avant la boîte de dialogue, mais permet également à l'utilisateur d'interagir avec la boîte de dialogue si elle est pressée?

Je connais Toasts, mais ils ne permettent pas l'interaction avec le popup.

  • Installation de sun-java6-jdk sur ubuntu 10.04 64 bit os
  • Android - Eclipse: Keystore a été falsifié ou le mot de passe était incorrect
  • Intellij IDEA 14 - Le paquet R n'existe pas
  • Android RatingBar montrant plus de 5 étoiles
  • Téléphone mute / unmute Android
  • Position personnalisée de l'indice dans la zone de texte d'édition.
  • Je connais Dialogs, mais ils sont modaux et ne permettent pas l'interaction avec le fond.

    Je connais les notifications, mais je veux quelque chose qui soit visibile à l'écran.

    Je veux essentiellement pouvoir jouer à un jeu ou quelque chose et un popup apparaît que j'ai un nouvel email ou quelque chose. Je peux cliquer dessus pour voir mon email, mais je peux attendre qu'il disparaisse si je veux simplement continuer à jouer à mon jeu. Est-ce possible dans Android?

  • Comment afficher la chaîne en fonction de la largeur de la disposition
  • Comment utiliser la nouvelle fusion de manifeste (de Android Studio et Gradle)?
  • Quelle est la différence entre ViewFlipper et ViewSwitcher
  • La liste de suggestion d'autocomplèteTextView augmente
  • Disposition Android: L'UI des composants réutilisables est-elle possible?
  • Comment construire un lien de numéro de téléphone sur Android qui comprend une extension
  • 3 Solutions collect form web for “Dialogue temporaire modéré”

    Oui, créez une activité avec style Theme.Dialog . Il s'agit d'une activité normale qui ressemble à un dialogue, tout en étant sans modélisation et en acceptant des événements.

    Un exemple:

     <activity android:name=".activity.dialog.PhotoDialog" android:label="@string/photo_dialog_title" android:theme="@android:style/Theme.Dialog"/> 

    Edité :

    En effet, Theme.Dialog brouille l'activité sous-jacente et la rend inaccessible. J'ai eu une exigence similaire ici, j'ai dû afficher la boîte de dialogue de progression de téléchargement avec le bouton de texte et d'annulation. La capture principale consiste à configurer WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL et à réinitialiser WindowManager.LayoutParams.FLAG_DIM_BEHIND .

    Création d'une boîte de dialogue avec du contenu personnalisé:

      if (progressDialog == null) { progressDialog = new Dialog(activityRequestingProgressDialog); progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); progressDialog.setContentView(R.layout.progress_upload); progressBar = (ProgressBar) progressDialog.findViewById(R.id.progressBar); progressText = (TextView) progressDialog.findViewById(R.id.progressText); progressText.setText("0 %"); progressText.setTextSize(18); Button buttonCancel = (Button) progressDialog.findViewById(R.id.btnCancel); buttonCancel.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { cancelProgressDialog(); stopUpload("Upload cancelled."); } }); Window window = progressDialog.getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); window.setGravity(Gravity.BOTTOM); progressDialog.show(); } progressText.setText(text); progressBar.setProgress(percent); 

    Et c'est la mise en page de cette boîte de dialogue:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/progressDialog" android:orientation="vertical" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_centerVertical="true"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="18sp" android:padding="10dp" android:text="@string/progress_title"/> <LinearLayout android:id="@+id/progressDialog" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="wrap_content" android:padding="10dp" android:layout_centerVertical="true"> <ProgressBar android:id="@+id/progressBar" android:layout_width="150dp" android:layout_height="34dp" android:paddingRight="10dp" android:max="100" android:progress="0" android:fadingEdge="vertical" style="?android:attr/progressBarStyleHorizontal"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/progressText" android:paddingRight="10dp"/> <Button android:layout_height="40dp" android:layout_width="80dp" android:id="@+id/btnCancel" android:text="@string/dialog_cancel"/> </LinearLayout> </LinearLayout> 

    Ajoutez simplement le drapeau FLAG_NOT_TOUCH_MODAL à votre boîte de dialogue

     dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

    Ma mise en œuvre, qui a été un peu plus difficile mais aussi permet à des boutons de pression d'être capturés par une fenêtre d'arrière-plan

     _wm = this.getWindowManager(); LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); _view = layoutInflater.inflate(R.layout.notification, null); _params = new WindowManager.LayoutParams(); _params.height = android.view.ViewGroup.LayoutParams.WRAP_CONTENT; _params.width = android.view.ViewGroup.LayoutParams.WRAP_CONTENT; _params.flags = // this is to keep button presses going to the background window WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | // this is to enable the notification to recieve touch events WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; // background transparant _params.format = PixelFormat.TRANSLUCENT; _gravity = Gravity.TOP;//Gravity.BOTTOM; _wm.addView(_view, _params); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.