如何从带有对话框主题的扩展 ActionBarActivity 或 AppcompatActivity 的 Activity 中删除标题栏

Posted

技术标签:

【中文标题】如何从带有对话框主题的扩展 ActionBarActivity 或 AppcompatActivity 的 Activity 中删除标题栏【英文标题】:How to remove Title Bar from Activity extending ActionBarActivity or AppcompatActivity with Dialog Theme 【发布时间】:2015-08-25 02:26:04 【问题描述】:

之前和现在从 AppcompatActivity 中,我必须使用主题 Theme.AppCompat.Light.Dialog 从 ActionBarActivity 扩展我的 Activity,因为我的 Base Activity 扩展了这个。

但现在有了新的 appcompat v7 (v22) 库,我的 Activity 开始显示标题栏,尽管我使用自定义样式和项目 windowActionBar=false、android:windowNoTitle=true。但是直到 appcompat 库升级没有这样的问题,标题栏没有显示。

如果我的活动扩展 FragmentActivity 一切正常,并且我知道我可能使用了我的对话活动从 AppcompatActivity 扩展的错误模式,但我想知道有没有办法删除标题栏?

【问题讨论】:

为什么不扩展活动 因为 Activity 从扩展 AppCompatActivity 的基类 Activity 继承了一些常见的东西。在我的应用中,几乎所有活动都扩展了这个基础。 @MikhailKharbanov 你找到解决这个问题的方法了吗? 【参考方案1】:

尝试将此代码添加到您的清单中,特别是添加到您想要使其消失的活动Actionbar

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >

希望对你有帮助:D

【讨论】:

感谢您的回复,但我想完全使用 Theme.AppCompat.Light.Dialog。我的活动必须像一个对话框 您的意思是,您正在创建自定义对话框? 我正在创建 Activity,而不是 AlertDialog 或 DialogFragment。 尝试参考这个问题:***.com/questions/21521110【参考方案2】:

您可以通过调用hide() 在运行时隐藏操作栏。例如:

ActionBar actionBar = getSupportActionBar();
actionBar.hide();

【讨论】:

Android Studio 一直抱怨,直到我包装了 actionBar.hide();在空检查中: if (actionBar != null) actionBar.hide();【参考方案3】:

我遇到了同样的问题,需要执行以下操作来解决(注意使用“windowNoTitle”而不是“android:windowNoTitle”)

<style name="Theme.MyDialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

【讨论】:

@Mikhail 这应该是公认的答案。作品! :) 谢谢,答案是真的..:) 在这个简单的答案奏效之前,我尝试了很多荒谬的事情! 注释(使用“windowNoTitle”而不是“android:windowNoTitle”)至关重要!【参考方案4】:

如果您使用支持库,请使用:

getSupportActionBar().setDisplayShowTitleEnabled(false);

如果没有,则使用

getActionBar().setDisplayShowTitleEnabled(false);

【讨论】:

没有一种基于样式的方法对我有用(我的 Activity 继承自 AppCompatActivity);但是这个做到了:谢谢!【参考方案5】:

试试

  getSupportActionBar().hide() 

如果你正在使用 AppCompatActivity

还有

 getActionBar().hide() 

如果您的活动扩展了 ActionBarActivity。 希望对您有所帮助。

【讨论】:

【参考方案6】:

AndroidManifest.xml 中添加android:theme="@style/AppTheme.NoActionBar" 在我的情况下可以解决问题。

@Brexx Galangue 解决方案给了我以下运行时错误:

java.lang.RuntimeException:无法启动活动 引起:java.lang.IllegalStateException:你需要使用 带有此活动的 Theme.AppCompat 主题(或后代)。

【讨论】:

我也收到此错误,但在我的情况下 android:theme="@style/AppTheme.NoActionBar" 是未知的。【参考方案7】:

为了解决类扩展 AppCompatActivity 上的操作栏,我从 style.xml 文件中的主主题定义新主题扩展开始:

style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

并在 AndroidManifest.xml 中为您想要的活动实现 noactionbar 主题。希望对您有所帮助:)

【讨论】:

【参考方案8】:

AppCompat 主题中只有一件事有效 - supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

【讨论】:

【参考方案9】:
 public class MainActivity extends AppCompatActivity 

  @Override protected void onCreate(Bundle savedInstanceState) 
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
     getSupportActionBar().setCustomView(R.layout.custom_title_bar);

    

【讨论】:

R.layout.custom_title_bar 来自哪里? res/layout/custom_title_bar.xml

以上是关于如何从带有对话框主题的扩展 ActionBarActivity 或 AppcompatActivity 的 Activity 中删除标题栏的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有主题和扩展名的 ACE 编辑器存储在单个文件中?

Magento 扩展如何从默认主题应用主题?

从 mfc 扩展 dll 导出的无模式对话框不显示

带有动画更改的自定义进度对话框的大小

在 Android 中,如何像在谷歌地图中一样显示带有方角的警报对话框?

如何从在android中扩展应用程序的类中显示对话框?