android android-activity transparent

¿Cómo creo una Actividad transparente en Android?



android-activity (18)

Hay dos maneras:

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

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

Quiero crear una Actividad transparente sobre otra actividad.

¿Cómo puedo conseguir esto?


Acabo de hacer dos cosas, y hace que mi actividad sea transparente. Están 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"

Funciona perfectamente para mí.


Además de las respuestas anteriores:

para evitar la caída de Android relacionada con 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" />


Asígnele el tema translúcido.

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


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


Con la biblioteca "AppCompat" o la "Biblioteca de soporte de diseño de Android" es un poco diferente:

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


Declara tu actividad en el manifiesto así:

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

Y añada un fondo transparente a su diseño.


Dice así:

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


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

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


En mi caso, tengo que establecer el tema en el tiempo de ejecución en java basado en algunas condiciones. Así que 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 función setTheme() antes de super.onCreate(savedInstanceState); . Perdí este punto y estuve atascado durante 2 horas, pensando por qué mi tema no se refleja en el tiempo de ejecución.


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

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


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

No sé sobre versiones inferiores ...


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

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


Para la actividad de diálogo utilizo esto:

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

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


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

colores.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 colors.xml original tenía la etiqueta "dibujable":

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

Y también lo hice por 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.


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


Solo deja que la actividad sea transparente. O agrega el tema en el archivo XML:

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


Agregue el siguiente estilo en su archivo res/values/styles.xml (si no tiene uno, res/values/styles.xml ). 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/transparent es el valor de color #00000000 que puse en el archivo res/values/color.xml . También puede usar @android:color/transparent en versiones posteriores de Android).

Luego aplique el estilo a su actividad, por ejemplo:

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent"> ... </activity>