Respuestas:
Agregue el siguiente estilo en su res/values/styles.xml
archivo (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/transparent
es el valor de color #00000000
que puse en el res/values/color.xml
archivo. También puede usarlo @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>
android:windowIsFloating
establece en verdadero. Elimine esta propiedad para comportarse como una actividad normal (en este caso coincidirá android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Entonces parent="android:Theme"
estaba bloqueando mi aplicación. Simplemente lo eliminé y funcionó a las mil maravillas. ¡Gracias!
Dice así:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Cada componente (A, R, G, B) puede tomar valores de 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Que cómo calcular la transparencia (opacidad)
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>
Theme.Appcompat.Light.NoActionBar
lugar.
background
y poner su color transparente semi preferido enwindowBackground
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.
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" />
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:
<?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.
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 ...
AppCompatActivity
si está usando esto.
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.
En la función onCreate , debajo de setContentView , agregue esta línea:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
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));
.
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.
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" />
Acabo de hacer dos cosas e hizo que mi actividad fuera transparente. Estan abajo.
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"
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.
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 manifest
archivo puede agregar este tema a la etiqueta de actividad como esta
android:theme="@style/TransparentCompat"
para más detalles lee este artículo
El uso Theme.NoDisplay
seguirá 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 ".
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>
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"
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"
<item name="android:windowBackground">@android:color/transparent</item>