2011-05-20 12 views
15

Mi objetivo original aquí era un diálogo modal, pero ya sabes, Android no admitía este tipo de diálogo. Alternativamente, construir una actividad con temas de diálogo posiblemente funcionaría.
Aquí es código,Android: cómo crear una actividad transparente con temas de diálogo

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); 
} 

Sin embargo, el fondo fue siempre de color negro, que realmente confuso. La gente tiene el mismo problema,
http://code.google.com/p/android/issues/detail?id=4394
Solo quiero hacer que parezca más dialogante para el usuario. Entonces, ¿cómo hacer que DialogActivity sea transparente y nunca cubrir la pantalla subyacente?
Gracias.

Esto fue como creó el estilo

<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> 

Respuesta

22

Se puede crear un diálogo tranparent por esto.

public class DialogActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle(" "); 
     alertDialog.setMessage(""); 
     alertDialog.setIcon(R.drawable.icon); 
     alertDialog.setButton("Accept", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) {     
      } 
     }); 
     alertDialog.setButton2("Deny", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }); 
     alertDialog.show(); 
    } 
} 

Después de esto sólo hay que poner una línea en AndroidManifest.xml, donde se define su actividad en el manifiesto.

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

android: theme = "@ android: style/Theme.Translucent.NoTitleBar" cambia el tema del diálogo, aspecto y sensación. La interfaz de usuario completa del diálogo ha cambiado debido a esto. – Smeet

+0

Creo que debería usar el constructor new AlertDialog.Builder (this, R.style.Your_Dialog_Theme); – javmarina

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

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

+1

¡¡Bien !! simple y efectivo –

3

Sólo una rápida actualización de @ user824330 respuesta. Como tiene la clase AlertDialog.Builder, ¿por qué no usarla correctamente? Muchos métodos ahora están en desuso. El código de arriba-hasta la fecha sería similar a esto:

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 manera más fácil que he encontrado es fijar el tema de la actividad en el AndroidManifest a android:theme="@android:style/Theme.Holo.Dialog" después en llamada al método onCreate de la actividad getWindow().setBackgroundDrawable(new ColorDrawable(0));

+1

Gracias por su respuesta. Ver http://stackoverflow.com/questions/17459289/set-shape-background-to-transparent-in-android/17459644#17459644 –

5

Sólo una cosa que añadir a todas las respuestas aquí. para lograr un diálogo completo como comportamiento, puede cambiar la posición de la ventana de diálogo cambiando los parametros de disposición de ventana:

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

this.getWindow().setAttributes(params); 

se utilizó una técnica similar para lograr un efecto de la actividad flotando en el SDK Tooleap:

floating calculator

Cuestiones relacionadas