Respostas:
Adicione o seguinte estilo ao seu res/values/styles.xml
arquivo (se você não tiver um, crie-o.) Aqui está um arquivo 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>
(O valor @color/transparent
é o valor da cor #00000000
que eu coloquei no res/values/color.xml
arquivo. Você também pode usar @android:color/transparent
em versões posteriores do Android.)
Em seguida, aplique o estilo à sua atividade, por exemplo:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
ajuste para true. Remover esta propriedade a se comportar como uma atividade normal (neste caso, ele irá corresponder android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Então parent="android:Theme"
estava travando meu aplicativo. Acabei de removê-lo e funcionou como charme. Obrigado!
É assim:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Cada componente (A, R, G, B) pode obter valores 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Que a forma de calcular a transparência (opacidade)
No 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>
No AndroidManifest.xml:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
.
background
e colocar sua cor semi transparente preferidawindowBackground
Declare sua atividade no manifesto assim:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
E adicione um plano de fundo transparente ao seu layout.
Atribua o tema translúcido à atividade que você deseja tornar transparente no arquivo de manifesto do Android do seu projeto:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Eu queria adicionar um pouco mais a isso, pois também sou um desenvolvedor Android. A resposta aceita é ótima, mas tive alguns problemas. Eu não tinha certeza de como adicionar a cor ao arquivo colors.xml. Aqui está como isso deve ser feito:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
No meu arquivo colors.xml original, eu tinha a tag "drawable":
<drawable name="class_zero_background">#7f040000</drawable>
E também fiz isso pela cor, mas não entendi que a referência "@ color /" significava procurar a tag "color" no XML. Eu pensei que eu deveria mencionar isso também para ajudar mais alguém.
Eu o alcancei na 2.3.3, apenas adicionando android:theme="@android:style/Theme.Translucent"
a tag de atividade no manifesto.
Eu não sei sobre versões inferiores ...
AppCompatActivity
se você estiver usando isso.
No meu caso, eu tenho que definir o tema no tempo de execução em java com base em algumas condições. Então eu criei um tema com estilo (semelhante a outras respostas):
<?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>
Em Java, apliquei-o à minha atividade:
@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);
}
Lembre-se de um ponto importante aqui: você deve chamar a setTheme()
função antes super.onCreate(savedInstanceState);
. Perdi esse ponto e fiquei preso por 2 horas, pensando por que meu tema não é refletido no tempo de execução.
Na função onCreate , abaixo do setContentView , adicione esta linha:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
A maneira mais fácil que encontrei é definir o tema da atividade no AndroidManifest para android:theme="@android:style/Theme.Holo.Dialog"
.
Em seguida, no método onCreate da atividade, chame getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
Para a atividade de diálogo, eu uso este:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Mas você também precisa definir sua Visualização principal na atividade como invisível. Caso contrário, o plano de fundo ficará invisível enquanto todas as visualizações nele serão visíveis.
além das respostas acima:
evitar falhas relacionadas com o Android Oreo na atividade
<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" />
Acabei de fazer duas coisas e isso tornou minha atividade transparente. Eles estão abaixo.
No arquivo de manifesto, acabei de adicionar o código abaixo na tag de atividade .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
E acabei de definir o plano de fundo do layout principal dessa atividade como " # 80000000 ". Gostar
android:background="#80000000"
Funciona perfeitamente para mim.
Se você estiver usando AppCompatActivity
, adicione-ostyles.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>
No manifest
arquivo, você pode adicionar este tema à tag de atividade como esta
android:theme="@style/TransparentCompat"
para mais detalhes leia este artigo
O uso Theme.NoDisplay
ainda funcionará ... mas apenas em dispositivos Android mais antigos. No Android 6.0 e superior, utilizando Theme.NoDisplay sem chamar finish()
em onCreate() (or, technically, before onResume())
vão falhar a sua aplicação. É por isso que a recomendação é usar Theme.Translucent.NoTitleBar
, que não sofre com essa limitação . ”
Nota 1: Na pasta Drawable, crie test.xml e copie o seguinte 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: Os cantos e a forma são de acordo com sua exigência.
// Nota 2: Criar 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>
Basta adicionar a seguinte linha à tag de atividade no seu arquivo de manifesto que precisa parecer transparente.
android:theme="@android:style/Theme.Translucent"
Todas essas respostas podem ser confusas, há uma diferença entre a atividade Transparente e Nenhuma atividade da interface do usuário.
Usando isto:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Tornará a atividade transparente, mas bloqueará a interface do usuário.
Se você deseja uma atividade de interface do usuário Nenhum, use este:
android:theme="@android:style/Theme.NoDisplay"
<item name="android:windowBackground">@android:color/transparent</item>