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

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

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>

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.


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

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.


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


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.


9

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

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

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

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


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.


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

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.


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


2

Asignarle el tema Translúcido

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

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


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>

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"

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"


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.