Відповіді:
Додайте у свій 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>
android:windowIsFloating
встановлене значення true. Видаліть цю властивість, щоб вона android:style/Theme.Translucent.NoTitleBar
AppCompatActivity
. Так parent="android:Theme"
вийшов з ладу мій додаток. Я просто її зняв, і це спрацювало як шарм. Дякую!
Виходить так:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Кожен компонент (A, R, G, B) може приймати значення з 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Що як розрахувати прозорість (непрозорість)
У стилях.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>
Theme.Appcompat.Light.NoActionBar
замість цього.
background
і помістити бажаний напівпрозорий колір уwindowBackground
Заявіть про свою активність у маніфесті так:
<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. Прийнята відповідь чудова, але я зіткнувся з деякими неприємностями. Я не знав, як додати кольори до файлу color.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. Я подумав, що і про це я повинен згадати, щоб допомогти комусь іншому.
Я досяг цього на 2.3.3, просто додавши android:theme="@android:style/Theme.Translucent"
тег активності в маніфест.
Я не знаю про нижчі версії ...
AppCompatActivity
якщо ви використовуєте це.
У моєму випадку я повинен встановити тему на час виконання у 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 години, думаючи, чому моя тема не відображена під час виконання.
У функції onCreate під setContentView додайте цей рядок:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Найпростіший спосіб, який я знайшов, - це встановити тему діяльності в AndroidManifest android:theme="@android:style/Theme.Holo.Dialog"
.
Потім у методі onCreate діяльності зателефонуйте getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
Для діалогової діяльності я використовую це:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Але також потрібно встановити основний перегляд у діяльності невидимим. Інакше фон буде невидимим, тоді як всі види в ньому будуть видні.
на додаток до вищезазначених відповідей:
щоб уникнути аварійних аварій, пов'язаних з 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" />
Я просто зробив дві речі, і це зробило мою діяльність прозорою. Вони внизу.
У файл маніфесту я щойно додав код нижче у тег активності .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
І я просто встановив фон основного макета для цієї діяльності як " # 80000000 ". Подібно до
android:background="#80000000"
Це прекрасно працює для мене.
Якщо ви користуєтеся, 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"
Детальніше читайте в цій статті
Використання Theme.NoDisplay
все одно буде працювати ... але лише на старих пристроях Android. На Android 6.0 і вище, використовуючи Theme.NoDisplay без виклику finish()
в onCreate() (or, technically, before onResume())
буде врізатися вашу програму. Ось чому рекомендується використовувати Theme.Translucent.NoTitleBar
, яке не страждає від цього обмеження ».
Примітка 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>
Просто додайте наступний рядок до тегу активності у вашому файлі маніфесту, який повинен виглядати прозорим.
android:theme="@android:style/Theme.Translucent"
Усі ці відповіді можуть бути заплутаними. Існує різниця між прозорою активністю та відсутністю UI-активності.
Використовуючи це:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Зробить діяльність прозорою, але заблокує інтерфейс користувача.
Якщо ви хочете не використовувати UI, ніж скористайтеся цим:
android:theme="@android:style/Theme.NoDisplay"
<item name="android:windowBackground">@android:color/transparent</item>