Как создать прозрачную активность на Android?

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

Как я могу это достичь?

Ответы

Ответ 1

Добавьте следующий стиль в свой 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>

Ответ 2

Это происходит следующим образом:

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

Ответ 6

Я хотел добавить к этому немного, так как я новый разработчик 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. Я думал, что я должен упомянуть об этом, чтобы помочь кому-то еще.

Ответ 7

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

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

Ответ 8

В моем случае, я должен установить тему во время выполнения в 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 часов, думая, почему моя тема не отражается во время выполнения.

Ответ 9

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

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

Ответ 10

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

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

Ответ 11

Самый простой способ, который я нашел, - установить тему активности в AndroidManifest на android:theme="@android:style/Theme.Holo.Dialog".

Затем в методе actionCreate вызовите getWindow().setBackgroundDrawable(new ColorDrawable(0));.

Ответ 12

Для активности диалога я использую это:

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

Но вам также нужно настроить свой основной вид в активности невидимым. В противном случае фон будет невидим, пока все его виды будут видны.

Ответ 13

в дополнение к ответам выше:

чтобы избежать краха Android Oreo при активности

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

Ответ 14

Я только что сделал две вещи, и это сделало мою деятельность прозрачной. Они ниже.

  • В файле манифеста я добавил код ниже в теге activity.

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    
  • И я просто установил фон основного макета для этого действия как " # 80000000". Как

    android:background="#80000000"
    

Это отлично работает для меня.

Ответ 15

Назначьте тему прозрачности

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

Ответ 16

Есть два способа:

  1. Использование Theme.NoDisplay
  2. Использование Theme.Translucent.NoTitleBar

Использование Theme.NoDisplay будет по-прежнему работать... но только на старых устройствах Android. На Android 6.0 и выше, использование Theme.NoDisplay без вызова finish() в onCreate() (or, technically, before onResume()) приведет к сбою вашего приложения. Вот почему рекомендуется использовать Theme.Translucent.NoTitleBar, который не страдает от этого ограничения. '

Ответ 17

Примечание 1: В папке Drawable создайте test.xml и скопируйте следующий код

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

//Примечание. Уголки и форма соответствуют вашим требованиям.

//Примечание 2: Создать 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>

Ответ 18

Если вы используете AppCompatActivity, добавьте это в styles.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>

В файле manifest вы можете добавить эту тему в тег активности, как этот

android:theme="@style/TransparentCompat"

для более подробной информации прочитайте эту статью

Ответ 19

Просто добавьте следующую строку в тег активности в файле манифеста, который должен выглядеть прозрачным.

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

Ответ 20

Все эти ответы могут вводить в заблуждение, есть разница между прозрачной активностью и отсутствием пользовательского интерфейса.

Используя это:

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

Сделает деятельность прозрачной, но заблокирует пользовательский интерфейс.

Если вы хотите использовать пользовательский интерфейс None, используйте это:

android:theme="@android:style/Theme.NoDisplay"

Ответ 21

Вы можете удалить setContentView(R.layout.mLayout) из вашей деятельности и установить тему как android:theme="@style/AppTheme.Transparent". Проверьте эту ссылку для получения более подробной информации.