2011-05-20 2 views
15

Mon objectif original ici était un dialogue modal, mais vous savez, Android ne supportait pas ce type de dialogue. Alternativement, construire une activité sur le thème du dialogue pourrait fonctionner.
Code est ici,Android: comment créer une activité de dialogue transparente sur le thème

public class DialogActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    setTheme(android.R.style.Theme_Dialog); 

    super.onCreate(savedInstanceState); 

    requestWindowFeature (Window.FEATURE_NO_TITLE); 

    Button yesBtn = new Button(this); 
    yesBtn.setText("Yes"); 
    yesBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      DialogActivity.this.finish(); 

     } 

    }); 

    this.setContentView(yesBtn); 
} 

Cependant, l'arrière-plan est toujours noir, qui a vraiment déroutant. Les gens ont le même problème,
http://code.google.com/p/android/issues/detail?id=4394
Je veux juste que cela ressemble plus à un dialogue pour l'utilisateur. Alors, comment rendre cette DialogActivity transparente et ne jamais couvrir l'écran sous-jacent?
Merci.

Ce fut ainsi que je créé le style

<style name="CustomDialogTheme" parent="android:Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">false</item> 
</style> 

Répondre

22

Vous pouvez créer un dialogue tranparent par cela. Ensuite, placez une ligne dans AndroidManifest.xml, où vous définissez votre activité dans le manifeste.

android:theme="@android:style/Theme.Translucent.NoTitleBar" 
+0

android: theme = "@ android: style/Theme.Translucent.NoTitleBar" change le thème de la boîte de dialogue, son aspect et son toucher. L'interface utilisateur complète de la boîte de dialogue est modifiée en raison de cela. – Smeet

+0

Je pense que vous devriez utiliser le constructeur new AlertDialog.Builder (this, R.style.Your_Dialog_Theme); – javmarina

2
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); 

et import android.graphics.drawable.ColorDrawable; on top :)

+1

Bien !! simple et efficace –

3

Juste une rapide mise à jour sur @ user824330 réponse. Puisque vous avez la classe AlertDialog.Builder, pourquoi ne pas l'utiliser correctement? De nombreuses méthodes sont maintenant obsolètes. Le code mis à jour serait semblable à ceci:

public class DialogActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("title") 
     .setMessage("message") 
     .setIcon(R.drawable.ic_launcher) 
     .setPositiveButton("Yes", new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) {} 
     }) 
     .setNegativeButton("No", new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) {} 
     }); 

    final AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

}

11

La meilleure façon que je l'ai trouvé est de définir le thème de l'activité dans le AndroidManifest à android:theme="@android:style/Theme.Holo.Dialog" puis en appel de la méthode onCreate de l'activité getWindow().setBackgroundDrawable(new ColorDrawable(0));

+1

Merci pour votre réponse. Voir http://stackoverflow.com/questions/17459289/set-shape-background-to-transparent-in-android/17459644#17459644 –

5

Juste une chose à ajouter à toutes les réponses ici. Pour obtenir un dialogue complet comme comportement, vous pouvez repositionner la boîte de dialogue en modifiant la mise en page de la fenêtre params:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.x = ...; 
params.y = ...; 
params.width = ...; 
params.height = ...; 

this.getWindow().setAttributes(params); 

Nous avons utilisé une technique similaire pour obtenir un effet d'activité flottant dans le kit de développement Tooleap:

floating calculator

Questions connexes