透明背景的Activity

14

我想要实现的是对话框一样透明并且能够完全显示RelativeLayout内容的活动。以下是该活动的XML代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="50dip"
        android:layout_marginLeft="8dip"
        android:layout_marginRight="8dip"
        android:layout_marginTop="50dip">
        (...)
    </RelativeLayout>
</LinearLayout>

而这是明显的:

<activity
        android:name="com.acentic.rcontrol.activities.MyActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

现在背景仍然可见,我做错了什么?

--- 编辑: 我添加了

android:background="#c0000000"

现在我的LinearLayout的背景是透明的,正如我想要的那样,但是RelativeLayout中的TextView也变成了透明的...我该如何修改呢?


可能是 如何在Android中创建透明活动? 的重复。 - anon
将 android:background="#000000" 设置为 RelativeLayout 的背景。 - sweggersen
请检查链接中的代码,这对我有效。https://dev59.com/P3I95IYBdhLWcg3wvgl9#38589105 - Naeem Ibrahim
5个回答

12
尝试设置。
    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

在你的活动中。

你也可以尝试以这种风格进行:

 <style name="AppTheme" parent="@android:style/Theme.Translucent.NoTitleBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

第一种方法在我的情况下不起作用,第二种方法提供了完全的背景透明度+RelativeLayout内的TextView是半透明的,这是不合格的。 - Mariusz

7

创建样式

<style name="MyTransparentTheme" parent="android:Theme.Dialog">
       <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>

这是一个清单文件(manifest):
<activity
            android:name="your package.activity"
            android:theme="@style/MyTransparentTheme">
        </activity>

3
我在LinearLayout中添加了android:background="#c0000000",现在背景变成了透明的,但是RelativeLayout内部的TextView也变成了透明的。如何更改呢?
给你的RelativeLayout元素添加一个实心背景。这样,RelativeLayout将具有实心背景,并且只有边距将是透明的。

1
如果您的活动需要扩展自AppCompatActivity,您可以为您的活动创建一个自定义样式。
<style name="transparentActivity" parent="Theme.AppCompat.NoActionBar">
    <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>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

然后在清单文件中更改您的活动的默认样式

<activity android:name=".MyActivity"
        android:theme="@style/transparentActivity"/>

否则,如果您不需要您的活动从AppCompatActivity扩展,只需按照以下方式在清单中更改您的活动主题即可。
<activity android:name=".MyActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

0

在设置LinearLayout透明度后,尝试将其子项透明度设置为所需值。这样可以使它们的透明度与LinearLayout不同。试试看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接