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

时间:2010-04-07 08:48:22

标签: android android-layout titlebar

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

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

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

37 个答案:

答案 0 :(得分:1033)

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

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Remove notification bar
this.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

答案 1 :(得分:508)

您可以修改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"

注意:如果您之前使用过“默认”视图,则可能还应将父类从AppCompatActivity更改为Activity

答案 2 :(得分:375)

我现在做了以下事情。

我宣布一种风格继承了我的一般风格,然后禁用了titleBar。

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

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

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

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

答案 3 :(得分:164)

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

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

res / values 文件夹中,创建一个名为 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 / values-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+,请使用另一个 styles.xml 文件创建 res / values-v14 文件夹(是的,它可能已存在)。在该文件中放置以下代码:

<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"

到您想要没有标题的活动的活动标签或应用程序标签,如果您希望它应用于整个应用程序。

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

P.S。将值更改为android:theme="@style/Theme.FullScreen"将产生相同的效果,但也会删除通知栏。

答案 4 :(得分:100)

标题栏可以通过开发者Android页面上提到的两种方式删除:

manifest.xml文件中:

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

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
    
  2. 或针对特定活动:

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

答案 5 :(得分:48)

正确的答案可能是不延伸ActionbarActivity而只是扩展Activity


如果您仍然使用操作栏活动 似乎这是有效的:

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

似乎也有效:

styles.xml:

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

我可以像斯科特比格斯写的那样做。这种作品。除了那里没有主题。我的意思是设置菜单的背景是透明的:

只需更改

public class MainActivity extends ActionBarActivity {

到Activity或FragmentActivity

public class MainActivity extends Activity  {

然而,我可以使用材料设计使其看起来不够好而不能移除 动作栏: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. 设置应用程序图标
  2. 设置操作栏的颜色以匹配设计。
  3. 将图标设置为设置菜单
  4. 添加更多图标(顶部的按钮)
  5. 它是通过材料设计兼容性动作栏样式的示例。

答案 6 :(得分:43)

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

<activity 
    android:name=".MainActivity" 
    android:label="My App"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait">
上面的示例显然会覆盖您现有的应用主题,如果您有现有主题,则向其添加<item name="android:windowNoTitle">true</item>

答案 7 :(得分:34)

什么对我有用:

1- in styles.xml:

template<class> struct vectors_of;

template<class...As> struct vectors_of<type_list<As...>>{
     using type=type_list<std::vector<As>...>;
};
using vectors_of_a = typename vectors_of<a_pack<1,2>>::type;
在MainActivity中

2-

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>
    manifest中的
  1. 继承了样式:

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

答案 8 :(得分:20)

当我试图使用所有那些高评价的答案时,我的应用程序总是崩溃。 (我认为它与&#34; @android:style&#34;?)

有关

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

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

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

答案 9 :(得分:17)

创建如下主题。

 <!-- 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>

答案 10 :(得分:16)

添加

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

在AppTheme(styles.xml)中

答案 11 :(得分:14)

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

答案 12 :(得分:13)

如果您替换AppTheme

中的定义,则只需更改Style.xml中的DarkActionBar样式
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

NoActionBar

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

AndroidManifast.xml中定义的AppTheme

答案 13 :(得分:10)

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

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

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

答案 14 :(得分:10)

为您使用的主题添加以下内容:

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

答案 15 :(得分:10)

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

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

答案 16 :(得分:10)

对于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

中的启动画面活动实现相同的主题样式
<activity
        android: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>

结果如下:

enter image description here

答案 17 :(得分:10)

将此样式添加到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>

答案 18 :(得分:7)

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

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);
}

答案 19 :(得分:7)

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

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);

答案 20 :(得分:6)

在我的情况下,如果您使用的是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">

    <application
        android: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>

这是剪辑片段(见高亮代码): enter image description here

答案 21 :(得分:6)

我相信在 2020

中,仅一个答案

将以下行添加到styles.xml

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

答案 22 :(得分:5)

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

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这个答案。

答案 23 :(得分:5)

要隐藏标题和操作栏,我这样做了:

在Manifest的活动标签中:

scr["src"] = "https://" + settings.domain + ...

在setContentView之前的Activity.java中:

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

即,

//删除标题栏

  

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);

之前保留这些行

答案 24 :(得分:5)

这解决了我的问题

在清单中我的活动:

<application
        android: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>

答案 25 :(得分:4)

这就是完整代码的样子。注意导入android.view.Window。

package com.hoshan.tarik.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
    }
}

答案 26 :(得分:4)

在AndroidManifest.xml上的活动中添加主题@ style / Theme.AppCompat.Light.NoActionBar

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

答案 27 :(得分:4)

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

一个。已在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);

答案 28 :(得分:3)

添加最明显的文件,

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

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

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

答案 29 :(得分:3)

如果您执行用户 YaW ​​ Doug Paul 所说的内容,那么您必须记住在调用setContentView之前必须设置窗口功能。如果没有,您将获得例外。

答案 30 :(得分:2)

只需将App主题的父标记更改为“Theme.AppCompat.Light.NoActionBar”

答案 31 :(得分:2)

我更喜欢:-

  • AppTheme (整个应用程序主题)
  • AppTheme.NoActionBar (不含操作栏或工具栏的主题)
  • AppTheme.NoActionBar.FullScreen (无动作栏和状态栏的主题)

主题样式如下:-

<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>

还在onCreate方法中的super.onCreate(savedInstanceState)之后放置以下代码

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

答案 32 :(得分:2)

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

答案 33 :(得分:1)

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

“您需要将Theme.AppCompat主题(或后代)与此活动”

一起使用

您可以修复此问题,将扩展名更改为“活动”。

答案 34 :(得分:0)

我使用@YaW的解决方案从我的Activity中删除标题和通知。但是,显示对话框时会出现标题和通知。因此,要将其应用于对话框,请按如下所示继承对话框:

public class MyDialog extends android.app.Dialog{
    @Override
    protected 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);
    }    
}

答案 35 :(得分:0)

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

答案 36 :(得分:0)

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

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