如何在Android中使用AppCompat.Translucent类型的主题并支持actionbar?

69
我想要在其中一个活动中添加支持actionbar,之前我一直在使用theme.translucent来配置这个活动,但为了使支持actionbar正常工作,我需要继承Theme.AppCompat。我需要在该活动中保留半透明主题,但不幸的是,默认情况下没有Theme.AppCompat.translucent,是否有任何方法可以实现这个效果?
4个回答

168

您可以创建一个新的样式集,其属性与themes.xmlTheme.Translucent相同。

请将以下内容添加到您的styles.xml文件中:

<style name="Theme.AppCompat.Translucent">
    <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>

如果你想继承主题的其他东西,比如对话框样式等,可以将前缀Theme.AppCompat更改为其他内容。例如,像Theme.AppCompat.Light.Translucent这样的名称将具有Light主题的属性。

要使用新样式,请将主题属性设置为@style/Theme.AppCompat.Translucent

<activity
    android:name=".TranslucentActivity"
    android:theme="@style/Theme.AppCompat.Translucent" >
</activity>

想要在一个活动中添加一个Alertbox,但是希望这个活动是半透明的,这是一个完美的解决方案。已经作为现有答案的更新添加了另一个建议。 - raksja
有一个关于定义主题的问题。当我将上述主题应用于<activity>时,它的方向不起作用,但是如果我删除上述主题,则方向可以正常工作。 - Sagar Trehan
5
但是在透明的活动中,我得到了黑色工具栏。请帮我修复我的错误。 - Parama Sudha
2
这样做不太好,正确的方法是向(例如)<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">... 添加所需的属性。我已经向我的AppCompat主题中添加了<item name="android:windowIsTranslucent">true</item>,这样应用程序启动时就没有白色背景了。 - user25
这仍然显示操作栏。要消除操作栏,只需添加父项,例如:<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar"> - Sotti

39

Parama,

<style name="Theme.AppCompat.Translucent" 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>
    </style>

如果您想要工具栏消失,那么这应该是样式头。您可以使用任何具有NoActionBar的父主题来实现其他效果。

希望这可以帮助到您。


10
如果我们在透明活动中使用半透明效果,会引发其他问题 - Msgbox的颜色会变为白色(之前是黑色),默认对话框的颜色也会受到影响,旋转器会下拉但不显示下划线和下拉箭头。旋转器中的文本颜色为黑色,下拉菜单为白色,下拉文本为黑色等等。
要解决这个问题,您可以使用以下代码:

1
感谢您的帮助。 - Rameshbabu
1
我使用了https://dev59.com/k2Ei5IYBdhLWcg3w4Pnr#21492572来创建透明活动,但是我遇到了颜色不同的问题。 但是这个答案帮助我克服了颜色不同的问题,正如@Monika在答案中提到的。谢谢。 - Waseem
1
啊,这些解决方案似乎都不再起作用了,我一直得到黑屏。 - lasec0203

4
Cameron的回答是一个 不错的技巧,但它产生了一个悬浮操作栏和染色的状态栏,这不是我想要的。因此,我添加了更多的xml属性来使状态栏透明(对于sdk >=19),并使用java代码使操作栏不可见。
mainActivity.java:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
     ...
    }
     ...
}

styles.xml

<style name="AppTheme.TranslucentBG">
    <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:windowTranslucentNavigation">true</item>

</style>

manifest.xml

<application
    android:icon="@mipmap/ic_launcher"
    ...
    android:theme="@style/AppTheme"
    ...
    >


    <activity android:name=".MainActivity"
        android:theme="@style/AppTheme.TranslucentBG"
        ...
        >
        ...
    </activity>
</application>

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