18 ответов:
добавьте следующий стиль в вашей (Если у вас его нет, создайте его.) Вот полный файл:
<?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который я положил в . Вы также можете использовать@android:color/transparentв более поздних версиях Android.)затем примените стиль к своей деятельности, например:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent"> ... </activity>
это выглядит так:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
с библиотекой" AppCompat " или "библиотекой поддержки дизайна Android" это немного отличается:
в стилях.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>
объявите свою активность в манифесте следующим образом:
<activity android:name=".yourActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>и добавить прозрачный фон в макет.
назначьте полупрозрачную тему для действия, которое вы хотите сделать прозрачным в файле манифеста Android вашего проекта:
<activity android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Я хотел бы добавить к этому немного, как я новый разработчик Android, а также. Принятый ответ велик, но я действительно столкнулся с некоторыми проблемами. Я не был уверен, как добавить цвет в цвет.XML-файл. Вот как это должно быть сделано:
цвета.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="class_zero_background">#7f040000</color> <color name="transparent">#00000000</color> </resources>в моих оригинальных цветах.xml файл у меня был тег "drawable":
<drawable name="class_zero_background">#7f040000</drawable>и поэтому я сделал это для цвета, но я не понял, что ссылка "@color/ " означала поиск тег "цвет" в XML. Я подумал, что должен упомянуть об этом, чтобы помочь кому-то еще.
Я достиг этого на 2.3.3, просто добавив
android:theme="@android:style/Theme.Translucent"в теге activity в манифесте.Я не знаю о более низких версиях...
в моем случае, я должен установить тему во время выполнения в 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); }помню один важное замечание здесь: вы должны назвать
на onCreate, ниже setContentView добавьте следующую строку:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
просто пусть фоновое изображение активности будет прозрачным. Или добавьте тему в XML-файл:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
самый простой способ, который я нашел, это установить тему активности в AndroidManifest в
android:theme="@android:style/Theme.Holo.Dialog".затем в методе onCreate действия вызовите
getWindow().setBackgroundDrawable(new ColorDrawable(0));.
для диалогового действия я использую это:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);но вам также нужно установить свой основной вид в действии невидимым. В противном случае фон будет невидимым, а все виды в нем будут видны.
Я просто сделал две вещи, и это сделало мою деятельность прозрачной. Они внизу.
в файле манифеста я просто добавил ниже код в тег активность тег.
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"и я просто установил фон основного макета для этой деятельности как"#80000000". Как
android:background="#80000000"это прекрасно работает для меня.
Примечание 1: в папке Drawable создать тест.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>
есть два способа:
- С Помощью Тема.NoDisplay
- С Помощью Тема.Полупрозрачный.NoTitleBar
используя
Theme.NoDisplayпо-прежнему будет работать... но только на старых устройствах Android. На Android 6.0 и выше, используя темы.NoDisplay без вызоваfinish()inonCreate() (or, technically, before onResume())будет авария приложение. Вот почему рекомендация использоватьTheme.Translucent.NoTitleBar, который от этого не страдает ограничение."
просто добавьте следующую строку в тег activity в файле манифеста, который должен выглядеть прозрачным.
android:theme="@android:style/Theme.Translucent"
в дополнение к выше ответы:
чтобы избежать 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" />
Comments