如何使用现有的自定义主题隐藏XML中活动的标题栏

我想隐藏一些活动的标题栏。问题是我对所有活动应用了样式,因此我不能简单地将主题设置为@android:style/Theme.NoTitleBar

使用暂无标题栏主题作为我的样式的父级将从我的所有活动中删除标题栏。

我可以在某处设置无标题样式项目吗?

901195 次浏览

在您的onCreate()方法中执行此操作。

//Remove title barthis.requestWindowFeature(Window.FEATURE_NO_TITLE);
//Remove notification barthis.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//set content view AFTER ABOVE sequence (to avoid crash)this.setContentView(R.layout.your_layout_name_here);

this表示Activity

咳,您可以将主题应用于xml中的单个活动,例如没有标题。换句话说,将其从应用程序标签中取出,打开标签声明并将其放在所需的活动标签中。

我现在做了以下事情。

我声明了一个继承了我的常规样式的样式,然后禁用了titleBar。

<style name="generalnotitle" parent="general"><item name="android:windowNoTitle">true</item></style>

现在我可以将此样式设置为我想要隐藏标题栏的每个活动,覆盖应用程序范围的样式并继承所有其他样式信息,因此样式代码中没有重复。

要将样式应用于特定的活动,请打开AndroidManifest.xml并将以下属性添加到activity标记;

<activityandroid:theme="@style/generalnotitle">

你可以修改你的AndroidManifest.xml

<activity android:name=".MainActivity"android:label="@string/app_name"android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">

或者使用android:theme="@android:style/Theme.Black.NoTitleBar"如果你不需要全屏活动。

备注:如果您以前使用过'default'视图,您可能还应该将父类从AppCompatActivity更改为Activity

如果您使用this.requestWindowFeature(Window.FEATURE_NO_TITLE),当活动开始到onCreate时,用户仍然可以在启动动画期间看到标题栏。如果您使用@android:style/Theme.Black.NoTitleBar,如下所示,那么标题栏将不会在启动动画期间显示。

<activityandroid:name=".MainActivity"android:label="My App"android:theme="@android:style/Theme.Black.NoTitleBar"android:screenOrientation="portrait">

上面的示例显然会覆盖您现有的应用程序主题,如果您有现有主题,则向其添加<item name="android:windowNoTitle">true</item>

如开发者Android页面上所述,可以通过两种方式删除标题栏:

manifest.xml文件中:

  1. 如果您想在应用程序中的所有活动中删除它,请在application中添加以下内容:

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
  2. Or for a particular activity:

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

如果您按照用户YaW道格保罗的要求进行操作,那么您必须记住,在调用setContentView之前必须设置窗口功能。如果没有,您将获得异常。

我发现了可能发生此错误的两个原因。

一。窗口标志已在super.onCreate(savedInstanceState);中设置,在这种情况下,您可能希望使用以下命令顺序:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);

二。在TitleBar中有Back/Up按钮,这意味着当前活动是另一个活动的分层子级,在这种情况下,您可能希望注释掉或从onCreate方法中删除这行代码。

getActionBar().setDisplayHomeAsUpEnabled(true);

onCreate方法中,使用以下代码段:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);

创建一个主题如下。

 <!-- Variation on the Light theme that turns off the title --><style name="MyTheme" parent="android:style/Theme.Black"><item name="android:windowNoTitle">true</item></style>

只需在主活动onCreate()方法中使用getActionBar().hide();

我不喜欢this.requestWindowFeature(Window.FEATURE_NO_TITLE);,因为标题栏出现短暂,然后消失。

我也不喜欢android:theme="@android:style/Theme.NoTitleBar",因为我失去了新设备用户已经习惯的所有3.0+Holo更改。所以我遇到了这个解决方案。

在您的文件夹中创建一个名为styles.xml的文件(如果它不存在)。在该文件中放置以下代码:

<resources xmlns:android="http://schemas.android.com/apk/res/android"><style name="Theme.Default" parent="@android:style/Theme"></style><style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style><style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style></resources>

接下来使用另一个styles.xml文件创建一个res/值-v11(再次,这可能已经存在)。在该文件中放置以下代码:

<resources xmlns:android="http://schemas.android.com/apk/res/android"><style name="Theme.Default" parent="@android:style/Theme.Holo"></style><style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style><style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style></resources>

如果您的目标是4.0+,请创建一个res/值-v14文件夹,其中包含另一个styles.xml文件(是的,它可能已经在那里)。在该文件中放置以下代码:

<resources xmlns:android="http://schemas.android.com/apk/res/android"><style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style><style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style><style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style></resources>

最后,创建所有这些文件后,打开AndroidManifiest.xml文件,您可以添加代码:

android:theme="@style/Theme.NoTitle"

您不希望活动的活动标记或应用程序标记(如果您希望它应用于整个应用程序)。

现在,您的用户将获得与他们的设备版本相关联的主题以及您想要的屏幕布局。

附注:将值更改为android:theme="@style/Theme.FullScreen"将具有相同的效果,但也会删除通知栏。

或者,如果您想在任何时候隐藏/显示标题栏:

private void toggleFullscreen(boolean fullscreen){WindowManager.LayoutParams attrs = getWindow().getAttributes();if (fullscreen){attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;}else{attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;}getWindow().setAttributes(attrs);}

添加

<item name="android:windowNoTitle">true</item>

内部应用主题(styles.xml)

您可以在您的java文件中使用此代码

在设置或加载视图之前添加此行

requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);

为您使用的主题添加这两个:

    <item name="windowActionBar">false</item><item name="android:windowNoTitle">true</item>

正确的答案可能是不扩展ActionbarActivity,而只扩展活动


如果您仍然使用actionbar活动这似乎是工作:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getSupportActionBar().hide(); //<< thissetContentView(R.layout.activity_main);}

这似乎也有效:

styles.xml:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light" ><item name="android:windowNoTitle">true</item>   <!-- //this --></style>

我可以像Scott Biggs写的那样。这种工作。除了没有主题。我的意思是设置菜单的背景是透明的:

只是改变

public class MainActivity extends ActionBarActivity {

到活动或片段活动

public class MainActivity extends Activity  {

但是我可以使用材料设计使它看起来足够好而不是删除操作栏:https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. 应用程序的设置图标
  2. 设置动作栏的颜色以匹配设计。
  3. 将图标设置为设置菜单
  4. 添加更多图标(顶部的按钮)

它是通过材料设计兼容性动作条造型的例子。

第一个答案是闪石。以下是我的解释:添加:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

在oncreate()方法中。

之前:

super.onCreate(savedInstanceState);setContentView(R.layout.activity_start);

(不仅在setContentView之前)如果不这样做,你会被强迫。+1这个答案

这是完整代码的样子。请注意android.view.窗口的导入。

package com.hoshan.tarik.test;
import android.app.Activity;import android.os.Bundle;import android.view.Window;
public class MainActivity extends Activity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);}}

Android Studio留档中的WindowManager. LayoutParams表示FLAG_FULLSCREEN“窗口标志:在显示此窗口时隐藏所有屏幕装饰(例如状态栏)”,因此此标志不会使我的内容填满整个屏幕。

这篇文章中提到了它,但没有人明确地解决它,所以也许这会节省人们一些时间。如果你像我一样,有多个类扩展了一个扩展ActionBarActivity的根类,尝试将该活动设置为NoTitleBar/NoActionBar可能不会立即明显会引发错误,具体来说:

msgstr"您需要在此活动中使用主题. AppCompat主题(或后代)"

您可以将扩展更改为活动来修复此问题。

我使用@YaW的解决方案从我的活动中删除标题和通知。但是,在显示对话框时会显示标题和通知。因此,要将其应用于对话框,请对对话框进行子类化,如下所示:

public class MyDialog extends android.app.Dialog{@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.mydialog);}}

只需将App主题的父标签更改为“Thame. AppCompatLight. NoActionBar”

在我的例子中,如果你使用的是Android Studio 2.1,并且你的编译SDK版本是6.0,那么只需转到你的manifest.xml文件,并更改以下代码:

以下是代码:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.lesterxu.testapp2">
<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/Theme.AppCompat.NoActionBar"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

这是剪辑拍摄(请参阅高亮代码):输入图片描述

我正在使用支持小部件工具栏v7。所以,为了能够删除或隐藏标题,我们需要写这个。

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);setSupportActionBar(myToolbar);
//Remove¡ing title bargetSupportActionBar().setDisplayShowTitleEnabled(false);

如果您替换了DarkActionBar中的定义,您只需要在Style.xml中更改AppTheme样式

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

在AndroidManifast.xml中定义的应用主题

当我试图使用所有那些高投票的答案时,我的应用程序总是崩溃。(我认为这与“@android: style”有关?)

对我来说,最好的解决方案是使用以下内容:

android:theme="@style/Theme.AppCompat.NoActionBar"

不再有标题/标题栏。只需将其放在<application>...</application><activity>...</activity>中,具体取决于您(不)希望它在整个应用程序中还是仅在特定活动中。

这解决了我的问题

显示我的活动:

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".SplashScreen"><intent-filter><action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

在“AppTheme”名称下的样式:

<resources>
<!-- Base application theme. --><style name="AppTheme"parent="Theme.AppCompat.Light.NoActionBar">**<item name="windowActionBar">false</item><item name="android:windowNoTitle">true</item>**<!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style>
</resources>

添加主题@style/Theme. AppCompatLight. NoActionBar在您的活动AndroidManifest.xml像这样

<activityandroid:name=".activities.MainActivity"android:theme="@style/Theme.AppCompat.Light.NoActionBar"></activity>

将此样式添加到您的style.xml文件

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

之后,将此样式名称引用到您的androidManifest.xml中,您不想在其中看到标题栏,如下所示。

<activity android:name=".youractivityname"android:theme="@style/AppTheme.NoActionBar"></activity>

什么对我有用:

1、styles.xml:

 <style name="generalnotitle" parent="Theme.AppCompat.Light" ><item name="android:windowNoTitle">true</item>   <!-- //this --></style>

2-在主活动中

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getSupportActionBar().hide(); //<< thissetContentView(R.layout.activity_main);}
  1. 在清单中继承样式:

    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">

添加最明显的文件,

  android:theme="@android:style/Theme.Translucent.NoTitleBar"

将以下行添加到您的java文件中,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

为了隐藏标题和动作栏,我这样做了:

在清单的活动标签中:

android:theme="@style/AppTheme.NoActionBar"

在Activity.javasetContentView之前:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

即,

//删除标题栏

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//删除通知栏

this.getWindow(). setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

:你需要在setContentView之前保留这些线

对于AppCompat,以下解决方案对我有效:

添加新的主题样式,在您的styles.xml中没有操作栏并设置parent="Theme.AppCompat.NoActionBar"

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimary</item><item name="colorAccent">@color/colorAccent</item><item name="android:windowBackground">@color/colorPrimary</item>
</style>


现在在androidManifest.xml中为您的启动屏幕活动实现相同的主题样式

<activityandroid:name=".ActivityName"android:theme="@style/SplashTheme"> // apply splash them here
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

以下是结果:

在此处输入图片描述

我正在使用Android Xamarin,这对我很有效。

SupportActionBar.Hide();SetContentView(Resource.Layout.activity_main);

我更喜欢:-

  • 应用主题(整个应用程序主题)
  • 应用主题(没有操作栏或工具栏的主题)
  • 应用程序主题。无操作栏。全屏(没有动作栏和状态栏的主题)

主题风格如:-

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorDarkPrimary</item><item name="colorAccent">@color/colorAccent</item></style>
<style name="AppTheme.NoActionBar" parent="AppTheme"><item name="windowActionBar">false</item><item name="windowNoTitle">true</item></style>
<style name="AppTheme.NoActionBar.FullScreen" parent="AppTheme.NoActionBar"><item name="android:windowFullscreen">true</item></style>

也把下面的代码后super.on创建(保存Instance状态)在onCreate menthod

super.onCreate(savedInstanceState)this.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN)

我相信在2020中只有单行答案

将以下行添加到styles.xml

<item name="windowNoTitle">true</item>

在我的情况下,我的活动是扩展AppCompatActivity。

class MyActivity: AppCompatActivity(){...}

其他答案不起作用。我必须这样做:

class MyActivity: AppCompatActivity(){this.supportRequestWindowFeature(Window.FEATURE_NO_TITLE)}

它奏效了!

如果您的活动扩展了AppCompatActivity,只需在请求窗口功能(…)之前添加“支持”。