Odpowiedzi:
Dodaj następujący styl do swojego res/values/styles.xml
pliku (jeśli go nie masz, utwórz go). Oto kompletny plik:
<?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>
(Wartością @color/transparent
jest wartość koloru, #00000000
którą umieściłem w res/values/color.xml
pliku. Możesz także użyć @android:color/transparent
w późniejszych wersjach Androida).
Następnie zastosuj styl do swojej aktywności, na przykład:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
ustawienia na true. Usuń tę właściwość, aby zachowywać się jak normalna aktywność (w tym przypadku będzie pasować android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Tak samo parent="android:Theme"
awaria mojej aplikacji. Właśnie go usunąłem i działało to jak urok. Dzięki!
Wygląda to tak:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Każdy składnik (A, R, G, B) może przyjmować wartości 0-255
. 50% of 255 = 127. 127 in Hex = 7F
To, jak obliczyć przezroczystość (nieprzezroczystość)
W pliku 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>
W AndroidManifest.xml:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
zamiast tego odziedziczyć motyw .
background
i umieścić preferowany kolor półprzezroczysty wwindowBackground
Zadeklaruj swoją aktywność w manifeście w ten sposób:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
I dodaj przezroczyste tło do swojego układu.
Przypisz półprzezroczysty motyw do działania, które chcesz uczynić przezroczystym w pliku manifestu Androida swojego projektu:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Chciałem to trochę dodać, ponieważ jestem również nowym programistą Androida. Przyjęta odpowiedź jest świetna, ale miałem problemy. Nie byłem pewien, jak dodać kolor do pliku colors.xml. Oto, jak należy to zrobić:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
W moim oryginalnym pliku colors.xml miałem tag „drawable”:
<drawable name="class_zero_background">#7f040000</drawable>
Zrobiłem to również dla koloru, ale nie rozumiałem, że odwołanie „@ color /” oznacza poszukiwanie znacznika „color” w pliku XML. Pomyślałem, że powinienem również o tym wspomnieć, aby pomóc wszystkim innym.
Osiągnąłem to w 2.3.3, po prostu dodając android:theme="@android:style/Theme.Translucent"
znacznik aktywności w manifeście.
Nie wiem o niższych wersjach ...
AppCompatActivity
jeśli używasz tego.
W moim przypadku muszę ustawić motyw w środowisku wykonawczym w Javie na podstawie niektórych warunków. Więc stworzyłem jeden motyw w stylu (podobny do innych odpowiedzi):
<?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>
Następnie w Javie zastosowałem to do mojej działalności:
@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);
}
Zapamiętaj jeden Ważny punkt tutaj: musisz wywołać tę setTheme()
funkcję wcześniej super.onCreate(savedInstanceState);
. Brakowało mi tego punktu i utknąłem na 2 godziny, zastanawiając się, dlaczego mój motyw nie jest odzwierciedlany w czasie wykonywania.
W funkcji onCreate , poniżej setContentView , dodaj ten wiersz:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Najłatwiejszym sposobem, jaki znalazłem, jest ustawienie motywu działania w AndroidManifest na android:theme="@android:style/Theme.Holo.Dialog"
.
Następnie w metodzie onCreate działania wywołanie getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
Do aktywności w dialogu używam tego:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Ale musisz także ustawić swój główny widok w aktywności na niewidoczny. W przeciwnym razie tło będzie niewidoczne, a wszystkie widoki w nim będą widoczne.
oprócz powyższych odpowiedzi:
aby uniknąć awarii Androida związanej z 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" />
Zrobiłem tylko dwie rzeczy, dzięki czemu moja działalność była przejrzysta. Są poniżej.
W pliku manifestu właśnie dodałem poniższy kod w tagu aktywności .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
I właśnie ustawiłem tło głównego układu dla tego działania jako „ # 80000000 ”. Lubić
android:background="#80000000"
To doskonale dla mnie działa.
Jeśli używasz, AppCompatActivity
dodaj tostyles.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>
W manifest
pliku możesz dodać ten motyw do tagu aktywności takiego jak ten
android:theme="@style/TransparentCompat"
Aby uzyskać więcej informacji, przeczytaj ten artykuł
Korzystanie Theme.NoDisplay
będzie nadal działać… ale tylko na starszych urządzeniach z Androidem. W Androidzie 6.0 i wyższe, wykorzystując Theme.NoDisplay bez zawijania finish()
w onCreate() (or, technically, before onResume())
będą upaść swoją aplikację. Dlatego zaleca się stosowanie Theme.Translucent.NoTitleBar
, które nie podlega tym ograniczeniom . ”
Uwaga 1: W folderze Drawable utwórz plik test.xml i skopiuj następujący kod
<?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>
// Uwaga: Narożniki i kształt są zgodne z wymaganiami.
// Uwaga 2: Utwórz 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>
Wystarczy dodać następujący wiersz do tagu aktywności w pliku manifestu, który musi wyglądać przezroczysto.
android:theme="@android:style/Theme.Translucent"
Wszystkie te odpowiedzi mogą być mylące, istnieje różnica między aktywnością Transparent a aktywnością None UI.
Za pomocą tego:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Sprawi, że działanie będzie przezroczyste, ale zablokuje interfejs użytkownika.
Jeśli chcesz mieć działanie interfejsu użytkownika Brak, użyj tego:
android:theme="@android:style/Theme.NoDisplay"
<item name="android:windowBackground">@android:color/transparent</item>