Як створити прозору активність на Android?


Відповіді:


1392

Додайте у свій 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>

13
Я використав<item name="android:windowBackground">@android:color/transparent</item>
хтось десь

33
Чудово! Лише одне вдосконалення: якщо ви використовуєте parent = "@ android: style / Theme.Dialog", ви отримаєте саме поведінку діалогу. Це означає, що
вимкнення / вимкнення

73
Як згадував @Emilio, це буде вести себе як діалог, головним чином через android:windowIsFloatingвстановлене значення true. Видаліть цю властивість, щоб вона android:style/Theme.Translucent.NoTitleBar
вела

38
Я видалив <item name = "android: windowIsFloating"> true </item>, щоб мати повноекранний режим і прозору активність
Kiem Duong

12
Моя діяльність була похідною від AppCompatActivity. Так parent="android:Theme"вийшов з ладу мій додаток. Я просто її зняв, і це спрацювало як шарм. Дякую!
Атул

193

Виходить так:

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

3
Ви просто додаєте тему, яку Alex опублікував у вашій декларації про активність у маніфесті - цей біт android: topic = "@ android: style / Theme.Translucent.NoTitleBar, для кожної діяльності ви можете призначити їй Прозору тему
Donal Rafferty

12
@UMMA: Зазвичай використання одного питання питання достатньо. Декілька знаків запитання змушують людей, які потребують часу, щоб відповісти на ваші запитання, думати, що ви стрибаєте в їх обличчя.
Маттіас

7
@ Маттіас вони зазвичай є, тому що їх начальники стрибають у своїх
Рено

16
@ User1129443: 50% black should be #7f000000. Кожен компонент (A, R, G, B) може приймати значення з 0-255. 50% of 255 = 127. 127 in Hex = 7FЩо як розрахувати прозорість (непрозорість)
Нам Трунг

4
Цей спосіб блокує користувальницький інтерфейс під час запуску діяльності, але оскільки він встановлений напівпрозорим, не можна нічого робити. Існує спосіб уникнути блокування цього інтерфейсу.
Ахіл Латта

126

У стилях.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>

1
Якщо ви плануєте реально відображати щось у цій діяльності (скажімо, діалог або діалоговий фрагмент), ви помітите, що все є темною тематикою. Тому ви можете хотіти, щоб ваша тема успадкувала Theme.Appcompat.Light.NoActionBarзамість цього.
tir38

1
у моєму випадку він показує чорний фон. У мене з батьківською темою встановлено щось інше, але в рамках однієї конкретної діяльності я змінюю тему, як згадувалося. Будь-яка допомога?
Абдул Вахід

4
Чудово працює, коли я видаляю "android: background"
Oded Breiner

2
Я думаю, ви хочете видалити backgroundі помістити бажаний напівпрозорий колір уwindowBackground
hmac

Це має бути відповіддю, якщо ваша діяльність використовує AppCompatActivity на відміну від відповіді @ gnobal.
AeroEchelon

37

Заявіть про свою активність у маніфесті так:

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

І додайте прозорий фон у ваш макет.


Кращий спосіб. Дякую
Петро

5
Вам потрібно використовувати тему Theme.AppCompat (або нащадка) з цією діяльністю.
Пуні

28

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

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

16

Я хотів трохи додати до цього, оскільки я також новий розробник Android. Прийнята відповідь чудова, але я зіткнувся з деякими неприємностями. Я не знав, як додати кольори до файлу color.xml. Ось як це слід зробити:

кольори.xml

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

У моєму оригінальному файлі color.xml у мене був тег "dravable":

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

І тому я це зробив і для кольору, але не зрозумів, що посилання "@ color /" означає шукати тег "color" у XML. Я подумав, що і про це я повинен згадати, щоб допомогти комусь іншому.


16

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

Я не знаю про нижчі версії ...


Це чудово працює і для 2.2. Я щойно створив просту діяльність з переглядом списку, і вона пливе на вершині останньої активності.
слот

Додано в API 1, це не проблема :)
xmen

6
Не використовуйте, AppCompatActivityякщо ви використовуєте це.
zackygaurav

також працює в 7.0, тому його хороший підхід. Я змінив його на @android: style / Theme.Translucent.NoTitleBar.Fullscreen
Sandeep

16

У моєму випадку я повинен встановити тему на час виконання у 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

У функції onCreate під setContentView додайте цей рядок:

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

23
Зробити фон повністю ЧОРНИМ чомусь.
Субін Себастьян

моя теж @SubinSebastian, хтось знайшов виправлення на це?
finnmglas

8

Просто нехай фонове зображення діяльності буде прозорим. Або додайте тему у XML-файл:

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

7

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

Потім у методі onCreate діяльності зателефонуйте getWindow().setBackgroundDrawable(new ColorDrawable(0));.


6

Для діалогової діяльності я використовую це:

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

Але також потрібно встановити основний перегляд у діяльності невидимим. Інакше фон буде невидимим, тоді як всі види в ньому будуть видні.


2
Робить фон повністю
ЧЕРНИМ

5

на додаток до вищезазначених відповідей:

щоб уникнути аварійних аварій, пов'язаних з Android

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

2
Станом на 2018 рік, це має бути найкраща відповідь
Geek Guy

дав мені чорний фон на емуляторі з API 28
Хтось десь

Я спробував це виправити збій, пов’язаний із встановленням орієнтації в android 8.0, але я все ще отримую IllegalStateException: Лише повна непрозора діяльність запитує орієнтацію
Rahul Sahni

3

Я просто зробив дві речі, і це зробило мою діяльність прозорою. Вони внизу.

  1. У файл маніфесту я щойно додав код нижче у тег активності .

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
  2. І я просто встановив фон основного макета для цієї діяльності як " # 80000000 ". Подібно до

    android:background="#80000000"

Це прекрасно працює для мене.


3

Якщо ви користуєтеся, 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"

Детальніше читайте в цій статті


2

Призначте їй Прозору тему

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

2

Є два способи:

  1. Використання теми Theme.NoDisplay
  2. Використання Theme.Translucent.NoTitleBar

Використання Theme.NoDisplayвсе одно буде працювати ... але лише на старих пристроях Android. На Android 6.0 і вище, використовуючи Theme.NoDisplay без виклику finish()в onCreate() (or, technically, before onResume())буде врізатися вашу програму. Ось чому рекомендується використовувати Theme.Translucent.NoTitleBar, яке не страждає від цього обмеження ».


1

Примітка 1: У папці Dravable створити 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>

0

Просто додайте наступний рядок до тегу активності у вашому файлі маніфесту, який повинен виглядати прозорим.

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

0

Усі ці відповіді можуть бути заплутаними. Існує різниця між прозорою активністю та відсутністю UI-активності.

Використовуючи це:

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

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

Якщо ви хочете не використовувати UI, ніж скористайтеся цим:

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.