如何从带有对话框主题的扩展 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 中删除标题栏的主要内容,如果未能解决你的问题,请参考以下文章