Как создать прозрачную активность на Android?
Я хочу создать прозрачное действие поверх другого действия.
Как я могу этого достичь?
18 ответов
добавьте следующий стиль в вашей res/values/styles.xml
file (если у вас его нет, создайте его.) Вот полный файл:
<?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()
на onCreate() (or, technically, before onResume())
будет авария приложение. Вот почему рекомендация использовать Theme.Translucent.NoTitleBar
, который не страдает от этого ограничение."
просто добавьте следующую строку в тег действия в файле манифеста, который должен выглядеть прозрачным.
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" />