Как мне создать прозрачную активность на Android? - PullRequest
854 голосов
/ 01 февраля 2010

Я хочу создать прозрачное действие поверх другого действия.

Как мне этого добиться?

Ответы [ 19 ]

1307 голосов
/ 23 апреля 2010

Добавьте следующий стиль в файл res/values/styles.xml (если у вас его нет, создайте его). Вот полный файл:

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

(Значение @color/transparent - это значение цвета #00000000, которое я поместил в файл res/values/color.xml. Вы также можете использовать @android:color/transparent в более поздних версиях Android.)

Затем примените стиль к своей деятельности, например:

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
188 голосов
/ 01 февраля 2010

Это выглядит так:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
109 голосов
/ 29 июля 2015

С библиотекой "AppCompat" или "Библиотекой поддержки Android Design" все немного по-другому:

В файле 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>

В AndroidManifest.xml:

<activity
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent">
    ...
</activity>
35 голосов
/ 02 июля 2012

Объявите свою активность в манифесте следующим образом:

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

И добавьте прозрачный фон в макет.

27 голосов
/ 29 октября 2013

Назначьте полупрозрачную тему для действия, которое вы хотите сделать прозрачным, в файле манифеста Android вашего проекта:

<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
15 голосов
/ 21 сентября 2011

Я добился этого на 2.3.3, просто добавив android:theme="@android:style/Theme.Translucent" в тег активности в манифесте.

Я не знаю о более низких версиях ...

15 голосов
/ 22 апреля 2011

Я хотел бы добавить к этому немного, поскольку я также являюсь новым разработчиком Android. Принятый ответ великолепен, но я столкнулся с некоторыми проблемами. Я не был уверен, как добавить цвет в файл colors.xml. Вот как это должно быть сделано:

colors.xml

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

В моем исходном файле colors.xml у меня был тег "drawable":

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

И я сделал это для цвета, но я не понял, что ссылка "@ color /" означает поиск тега "color" в XML. Я подумал, что должен упомянуть об этом, чтобы помочь кому-то еще.

11 голосов
/ 26 октября 2015

В моем случае, я должен установить тему во время выполнения в Java в зависимости от некоторых условий. Итак, я создал одну тему в стиле (аналогично другим ответам):

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

Затем в Java я применил это к своей деятельности:

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


    }

Запомните один Важный момент здесь: Вы должны вызвать функцию setTheme() до super.onCreate(savedInstanceState);. Я пропустил этот пункт и застрял на 2 часа, думая, почему моя тема не отражается во время выполнения.

7 голосов
/ 15 октября 2014

В функции onCreate ниже setContentView добавьте эту строку:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
7 голосов
/ 19 февраля 2012

Просто сделайте фоновое изображение активности прозрачным. Или добавьте тему в файл XML:

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