Android 如何获取支持操作栏的 AppCompat.Translucent 类型主题?

Posted

技术标签:

【中文标题】Android 如何获取支持操作栏的 AppCompat.Translucent 类型主题?【英文标题】:Android how to get AppCompat.Translucent type theme with support actionbar? 【发布时间】:2014-01-18 16:18:44 【问题描述】:

我想将支持操作栏添加到我的一项活动中,我之前一直在使用 theme.translucent 进行此活动,但为了使支持操作栏工作,我需要继承 Theme.AppCompat,我需要在这个活动中保持一个半透明的主题,但不幸的是没有我可以默认看到的 Theme.AppCompat.translucent,有什么办法可以做到这一点?

【问题讨论】:

【参考方案1】:

您可以从themes.xml 创建一组与Theme.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>

【讨论】:

想给一个activity添加一个Alertbox,但是又想有一个半透明的ctivity,这是一个完美的解决方案。添加了另一个建议作为对现有答案的更新。 定义的主题有一个问题。当我将上述主题应用于 时,方向不起作用,但如果我删除上述主题,方向正常工作。 但我在透明活动中得到黑色工具栏。请帮我修复我的错误。 这不好,将所需属性添加到(例如)&lt;style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"&gt;... 的正确方法我已将&lt;item name="android:windowIsTranslucent"&gt;true&lt;/item&gt; 添加到我的 AppCompat 主题中,因此应用启动时没有白色背景 这仍然显示操作栏。要消除操作栏,只需添加一个父项,例如: 【参考方案2】:

参数,

<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 的父主题来实现其他效果。

希望对你有帮助

【讨论】:

【参考方案3】:

如果我们将 Translucent 用于透明活动。 它引发了其他问题 - Msgbox 的颜色(现在是白色以前是黑色),默认对话框颜色,微调器确实下拉但不显示下划线和下拉箭头。微调器颜色为黑色,文本为黑色;下拉白色下拉文字黑色等。 为了克服这个问题,你可以使用下面的代码

时尚

<style name="Theme.AppCompat.Transparent.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
    <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">false</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

在清单文件中

<activity
        android:name=".activity.YourActivityName"
        android:theme="@style/Theme.AppCompat.Transparent.NoActionBar" />

我希望它会有所帮助 谢谢

【讨论】:

感谢您的帮助 我使用***.com/a/21492572/5199061 来创建透明活动,但我遇到了颜色不同的问题。但是这个答案帮助我摆脱了@Monika在答案中提到的颜色不同的问题。谢谢 uggh,这些解决方案似乎都不起作用了,我一直在黑屏。【参考方案4】:

Cameron 的回答是 nice hack,但它产生了一个浮动操作栏并为我的状态栏着色,这是我不想要的。所以我添加了更多 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>

【讨论】:

以上是关于Android 如何获取支持操作栏的 AppCompat.Translucent 类型主题?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式获取 Android 导航栏的高度和宽度?

(Android)如何使用模式设置操作栏的样式[关闭]

如何获取Android手机底部导航栏的高度

如何删除 Android searchview 左侧的空间(不是操作栏的一部分)?

如何在操作栏的右侧添加图像视图?

如何获取状态栏和软键按钮栏的高度?