¿Cómo creo una actividad transparente en Android?

Respuestas:

1393

Agregue el siguiente estilo en su res/values/styles.xmlarchivo (si no tiene uno, créelo). Aquí hay un archivo completo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

(El valor @color/transparentes el valor de color #00000000que puse en el res/values/color.xmlarchivo. También puede usarlo @android:color/transparenten versiones posteriores de Android).

Luego aplique el estilo a su actividad, por ejemplo:

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
gnobal
fuente
13
Yo solía<item name="android:windowBackground">@android:color/transparent</item>
Someone Somewhere
33
¡Excelente! Solo una mejora: si usa parent = "@ android: style / Theme.Dialog" obtendrá el comportamiento exacto de un diálogo. Eso significa que la decoloración de entrada / salida en vez de deslizarse de entrada / salida (como una actividad)
PakitoV
73
Como @Emilio mencionó, esto se comportará como un diálogo, principalmente debido a que se android:windowIsFloatingestablece en verdadero. Elimine esta propiedad para comportarse como una actividad normal (en este caso coincidirá android:style/Theme.Translucent.NoTitleBar)
aromero
38
Eliminé <item name = "android: windowIsFloating"> true </item> para tener una actividad de pantalla completa y transparente
Kiem Duong
12
Mi actividad se derivó de AppCompatActivity. Entonces parent="android:Theme"estaba bloqueando mi aplicación. Simplemente lo eliminé y funcionó a las mil maravillas. ¡Gracias!
Atul
193

Dice así:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Yanchenko
fuente
3
Simplemente agregue el tema tal como Alex lo publicó en su declaración de actividad en el manifiesto: este bit android: theme = "@ android: style / Theme.Translucent.NoTitleBar, para cada Actividad puede asignarle el tema Translúcido
Donal Rafferty
12
@UMMA: Usar un signo de interrogación suele ser suficiente. Múltiples signos de interrogación hacen que las personas que se toman el tiempo para responder a sus preguntas piensen que está saltando a la cara.
Matthias
77
@Matthias generalmente lo son, porque sus jefes están saltando contra los suyos
Reno
16
@ user1129443: 50% black should be #7f000000. Cada componente (A, R, G, B) puede tomar valores de 0-255. 50% of 255 = 127. 127 in Hex = 7FQue cómo calcular la transparencia (opacidad)
Nam Trung
44
Este método bloquea la UI mientras se ejecuta la actividad, pero como está configurada como translúcida, no se puede hacer nada. Hay una manera de evitar este bloqueo de la UI.
Akhil Latta
126

En los styles.xml:

<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
    <item name="android:background">#33000000</item> <!-- Or any transparency or color you need -->
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

En el AndroidManifest.xml:

<activity
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent">
    ...
</activity>
Andrey
fuente
1
Si planea mostrar realmente algo en esta Actividad (por ejemplo, un Diálogo o un Fragmento de diálogo), notará que todo tiene un tema oscuro. Por lo tanto, es posible que desee que su tema herede en su Theme.Appcompat.Light.NoActionBarlugar.
tir38
1
en mi caso, muestra un fondo negro. Tengo un tema principal configurado para otra cosa, pero en una actividad en particular estoy cambiando el tema como se mencionó. ¿Ayuda?
Abdul Waheed
44
Funciona muy bien cuando elimino "android: background"
Oded Breiner
2
Creo que desea quitar backgroundy poner su color transparente semi preferido enwindowBackground
hmac
Esta debería ser la respuesta si su actividad está usando AppCompatActivity en contraste con la respuesta de @ gnobal.
AeroEchelon
37

Declara tu actividad en el manifiesto así:

 <activity   
     android:name=".yourActivity"    
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

Y agregue un fondo transparente a su diseño.

Deepak Swami
fuente
Mejor manera. Gracias
Peter
55
Debe usar un tema Theme.AppCompat (o descendiente) con esta actividad.
Puni
28

Asigne el tema translúcido a la actividad que desea hacer transparente en el archivo de manifiesto de Android de su proyecto:

<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Jigar Pandya
fuente
16

Quería agregar a esto un poco ya que también soy un nuevo desarrollador de Android. La respuesta aceptada es excelente, pero tuve algunos problemas. No estaba seguro de cómo agregar el color al archivo colors.xml. Así es como debe hacerse:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="class_zero_background">#7f040000</color>
     <color name="transparent">#00000000</color>
</resources>

En mi archivo original colors.xml tenía la etiqueta "dibujable":

<drawable name="class_zero_background">#7f040000</drawable>

Y también hice eso para el color, pero no entendí que la referencia "@ color /" significaba buscar la etiqueta "color" en el XML. Pensé que debería mencionar esto también para ayudar a alguien más.

Camille Sévigny
fuente
16

Lo logré en 2.3.3 simplemente agregando android:theme="@android:style/Theme.Translucent"la etiqueta de actividad en el manifiesto.

No sé sobre versiones inferiores ...

androabhay
fuente
Esto funciona bien para 2.2 también. Acabo de crear una actividad simple con una vista de lista y flota sobre la última actividad.
slott
Fue agregado en API 1, eso no es un problema :)
xmen
66
No lo use AppCompatActivitysi está usando esto.
zackygaurav
funciona en 7.0 también por lo que es un buen enfoque. Lo modifiqué a @android: style / Theme.Translucent.NoTitleBar.Fullscreen
Sandeep
16

En mi caso, tengo que configurar el tema en tiempo de ejecución en Java en función de algunas condiciones. Entonces creé un tema con estilo (similar a otras respuestas):

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

Luego, en Java, lo apliqué a mi actividad:

@Override
protected void onCreate(Bundle savedInstanceState) {

    String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
    if (email != null && !email.isEmpty()) {
        // We have the valid email ID, no need to take it from user,
        // prepare transparent activity just to perform bg tasks required for login
        setTheme(R.style.Theme_Transparent);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

    } else
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_dummy);
}

Recuerde un punto importante aquí: debe llamar a la setTheme()función antes super.onCreate(savedInstanceState);. Perdí este punto y me quedé atrapado durante 2 horas, pensando por qué mi tema no se refleja en el tiempo de ejecución.

Joya
fuente
9

En la función onCreate , debajo de setContentView , agregue esta línea:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Leebeedev
fuente
23
Hace que el fondo sea completamente NEGRO por alguna razón.
Subin Sebastian
el mío también @SubinSebastian, ¿alguien encontró una solución para eso?
Finnmglas
8

Simplemente deje que la imagen de fondo de la actividad sea transparente. O agregue el tema en el archivo XML:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
jian
fuente
7

La forma más fácil que he encontrado es establecer el tema de la actividad en el Manifiesto de Android en android:theme="@android:style/Theme.Holo.Dialog".

Luego, en el método onCreate de la actividad, llame getWindow().setBackgroundDrawable(new ColorDrawable(0));.

Drew Leonce
fuente
6

Para la actividad de diálogo uso esto:

getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);

Pero también debe configurar su Vista principal en la actividad como invisible. De lo contrario, el fondo será invisible, mientras que todas las vistas serán visibles.

Pavel Kataykin
fuente
2
Hace que el fondo sea completamente NEGRO
ucMedia
5

Además de las respuestas anteriores:

para evitar el bloqueo relacionado con Android Oreo en la actividad

<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

<activity
     android:name="xActivity"
     android:theme="@style/AppTheme.Transparent" />
Zafer Celaloglu
fuente
2
A partir de 2018, esta debería ser la mejor respuesta
Geek Guy
me dio un fondo negro en el emulador con API 28
Someone Somewhere
Intenté esto para solucionar el bloqueo relacionado con la configuración de la orientación en Android 8.0, pero todavía obtengo IllegalStateException: solo las actividades opacas de pantalla completa solicitan orientación
Rahul Sahni
3

Acabo de hacer dos cosas e hizo que mi actividad fuera transparente. Estan abajo.

  1. En el archivo de manifiesto, acabo de agregar el siguiente código en la etiqueta de actividad .

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
  2. Y acabo de establecer el fondo del diseño principal para esa actividad como " # 80000000 ". Me gusta

    android:background="#80000000"

A mí me funciona perfectamente.

MD Sufi Khan
fuente
3

Si está utilizando AppCompatActivity, agregue esto enstyles.xml

<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

En el manifestarchivo puede agregar este tema a la etiqueta de actividad como esta

android:theme="@style/TransparentCompat"

para más detalles lee este artículo

Zohab Ali
fuente
2

Asignarle el tema Translúcido

android:theme="@android:style/Theme.Translucent.NoTitleBar"
saurabh
fuente
2

Hay dos formas:

  1. Usando Theme.NoDisplay
  2. Usando Theme.Translucent.NoTitleBar

El uso Theme.NoDisplayseguirá funcionando ... pero solo en dispositivos Android más antiguos. En Android 6.0 y superior, utilizando Theme.NoDisplay sin poner finish()en onCreate() (or, technically, before onResume())se bloquee su aplicación. Es por eso que la recomendación es usar Theme.Translucent.NoTitleBar, que no sufre esta limitación ".

Shubham Soni
fuente
1

Nota 1: en la carpeta Drawable, cree test.xml y copie el siguiente código

   <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <stroke android:width="2dp" />

    <gradient
        android:angle="90"
        android:endColor="#29000000"
        android:startColor="#29000000" />

    <corners
        android:bottomLeftRadius="7dp"
        android:bottomRightRadius="7dp"
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp" />

</shape>

// Nota: las esquinas y la forma son según su requisito.

// Nota 2: Crear xml:

    <?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:background="@drawable/test"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1.09"
            android:gravity="center"
         android:background="@drawable/transperent_shape"
            android:orientation="vertical" >
     </LinearLayout>
    </LinearLayout>
ManiTeja
fuente
0

Simplemente agregue la siguiente línea a la etiqueta de actividad en su archivo de manifiesto que debe verse transparente.

android:theme="@android:style/Theme.Translucent"
Kanagalingam
fuente
0

Todas esas respuestas pueden ser confusas, hay una diferencia entre la actividad Transparente y la actividad Ninguna.

Usando esto:

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

Hará que la actividad sea transparente pero bloqueará la IU.

Si desea una actividad de interfaz de usuario Ninguna, use esto:

android:theme="@android:style/Theme.NoDisplay"

Kashkashio
fuente
0

Puede eliminar setContentView(R.layout.mLayout)de su actividad y establecer el tema como android:theme="@style/AppTheme.Transparent". Consulte este enlace para más detalles.

Bali
fuente