Answers:
在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
那如何计算透明度(opacity)
在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>
在AndroidManifest.xml中:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
。
background
您喜欢的半透明颜色并将其放入windowBackground
将半透明主题分配给要在项目的Android清单文件中使其透明的活动:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
我也想加入一点,因为我也是一名新的Android开发人员。可以接受的答案很好,但是我确实遇到了一些麻烦。我不确定如何将颜色添加到colors.xml文件中。这是应该如何做:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
在我原来的colors.xml文件中,标签为“ drawable”:
<drawable name="class_zero_background">#7f040000</drawable>
因此,我也对颜色做了同样的事情,但是我不明白“ @ color /”引用意味着要在XML中寻找标签“ color”。我认为我也应该提到这一点,以帮助其他人。
我通过android:theme="@android:style/Theme.Translucent"
在清单中添加活动标签在2.3.3上实现了它。
我不知道较低的版本...
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);
。我错过了这一点,坚持了两个小时,想着为什么我的主题在运行时没有反映出来。
在onCreate函数的setContentView下面,添加以下行:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
对于对话框活动,我使用以下命令:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
但是,您还需要将活动中的主视图设置为不可见。否则,背景将是不可见的,而其中的所有视图都将是可见的。
除了以上答案:
避免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" />
如果您正在使用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:在Drawable文件夹中创建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>
<item name="android:windowBackground">@android:color/transparent</item>