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

Jan*_*usz 855 android titlebar android-layout

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

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

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

YaW*_*YaW 1048

在您的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); 
Run Code Online (Sandbox Code Playgroud)

this是指Activity.

  • 一定要在调用setContentView(R.id.x)之前放*,否则会崩溃.原因并不是我立即明白的.08-13 12:47:33.561 E/AndroidRuntime(9125):java.lang.RuntimeException:无法启动活动ComponentInfo {com.myapp/com.myapp.SplashActivity}:android.util.AndroidRuntimeException:requestFeature()必须被调用在添加内容之前 (205认同)
  • 使用API​​ 22时这不起作用.我仍然会在应用程序启动时看到标题栏. (19认同)
  • 您应该提到当使用requestWindowFeature()时,如果在添加**any**内容后执行此行,则会发生强制关闭.另外,XML方法更安全,它还将页面结构与代码分开(这首先是XML的_entire_目的.) (9认同)
  • 很好的答案.您不必同时执行这两项操作,删除通知栏可能会有点过分. (7认同)
  • 它适用于您的活动扩展Activity Not AppCompatActivity,即您的类应声明为公共类myActi extends Activity {} (6认同)
  • XML/theme方法较差,因为它会重置应用程序的整个主题.即,如果你在蜂窝+上,做其他人建议的android:theme将重置你的整个应用程序的主题为非全息. (2认同)

Red*_*dax 515

你可以修改你的AndroidManifest.xml:

<activity android:name=".MainActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
Run Code Online (Sandbox Code Playgroud)

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

注意:如果您之前使用过"默认"视图,则可能还应将父类更改AppCompatActivityActivity.

  • `android:theme ="@ android:style/Theme.Black.NoTitleBar"`可能更有用,除非你正在制作游戏 (82认同)
  • 我不知道为什么,但这会让我的应用程序崩溃.有帮助吗? (18认同)
  • @Akeshwar:你可能不得不搞乱你的styles.xml文件.例如,将<style name ="AppTheme"parent ="Theme.AppCompat.Light.DarkActionBar">更改为<style name ="AppTheme"parent ="Theme.AppCompat.Light.NoActionBar">.如果这样做,则无需更改AndroidManifest.xml文件.(我也遇到了崩溃,直到我做了这个修复.) (10认同)
  • 或者<style name ="AppTheme"parent ="android:Theme.Light.NoTitleBar"/>来点亮主题. (7认同)

Jan*_*usz 378

我现在做了以下事情.

我声明了一种样式,从我的一般样式继承了所有内容,然后禁用了titleBar.

<style name="generalnotitle" parent="general">
    <item name="android:windowNoTitle">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

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

<activity
    android:theme="@style/generalnotitle">
Run Code Online (Sandbox Code Playgroud)

  • 我相信他创造了一种称为"通用"的风格,他只是在扩展它.只需将其移除以供自己使用. (13认同)
  • 用于回答问题的+1,而不仅仅是指定最明显的方式来实现类似的结果,就像这个问题上的大多数其他答案一样.遗憾的是你必须回答自己的问题才能得到准确的答案...... (7认同)
  • 我相信这是比编程的更优雅的解决方案this.requestWindowFeature(Window.FEATURE_NO_TITLE); 因为在这种情况下,一些"闪烁"的标题仍然可见 (4认同)

Dev*_*art 165

我不喜欢,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>
Run Code Online (Sandbox Code Playgroud)

接下来使用另一个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>
Run Code Online (Sandbox Code Playgroud)

如果您的目标是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>
Run Code Online (Sandbox Code Playgroud)

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

android:theme="@style/Theme.NoTitle"
Run Code Online (Sandbox Code Playgroud)

如果您希望它应用于整个应用程序,则为您不想要标题的活动的活动标记或应用程序标记.

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

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

  • 啊,傻我!我正在使用ActionBarActivity,如果您想要移除ACTIONBAR,这是没有意义的!更改为简单的Activity或FragmentActivity允许这个漂亮的解决方案像魅力一样工作. (5认同)
  • 最佳答案.. this.requestWindowFeature(Window.FEATURE_NO_TITLE); 不合适,&lt;item name="android:windowNoTitle"&gt;true&lt;/item&gt; 丢失了原始主题..谢谢@DevinStewart ..accept +1 的解释:) (2认同)
  • “不幸的是,YourApp 已停止。” (2认同)

小智 101

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

manifest.xml文件中:

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

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者针对特定活动:

    <activity android:theme="@android:style/Theme.Black.NoTitleBar">
    
    Run Code Online (Sandbox Code Playgroud)

  • 最好使用android:theme ="@ android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"而不是black.theme.让设备处理主题.但是谢谢,我用你的方法 (15认同)
  • 如果你有较低的API,@ Varandpezeshk不起作用 (4认同)

Shi*_*kin 52

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


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

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

似乎这也有效:

styles.xml:

   <style name="AppBaseTheme" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>
Run Code Online (Sandbox Code Playgroud)

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

只是改变

public class MainActivity extends ActionBarActivity {
Run Code Online (Sandbox Code Playgroud)

到Activity或FragmentActivity

public class MainActivity extends Activity  {
Run Code Online (Sandbox Code Playgroud)

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

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

它是通过材料设计兼容性动作栏样式的例子.

  • 将ActionBarActivity更改为Activity对我来说是个窍门! (4认同)

raj*_*j c 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">
Run Code Online (Sandbox Code Playgroud)

上面的例子显然会覆盖你现有的应用程序主题,如果你有现有的主题然后添加<item name="android:windowNoTitle">true</item>到它.


Flo*_*wra 40

什么对我有用:

1- in styles.xml:

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>
Run Code Online (Sandbox Code Playgroud)

2-在MainActivity中

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
Run Code Online (Sandbox Code Playgroud)
  1. 在manifest中继承样式:

    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">
    
    Run Code Online (Sandbox Code Playgroud)


Try*_*ple 25

当我试图使用所有那些高赞成的答案我的应用程序总是崩溃.(我认为它与"@android:style"有关?)

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

android:theme="@style/Theme.AppCompat.NoActionBar"
Run Code Online (Sandbox Code Playgroud)

没有标题/标题栏了.只需将它放在<application>...</application><activity>...</activity>依赖于您(不)在整个应用程序或仅仅是特定活动中想要它.


san*_*ndy 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>
Run Code Online (Sandbox Code Playgroud)


nij*_*jas 16

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

在AppTheme内(styles.xml)


Ana*_*dan 15

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

  • getSupportActionBar()隐藏(); 这对我有用. (4认同)

Dan*_*evi 13

如果AppTheme从中替换定义,则只需更改Style.xml中的样式DarkActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Run Code Online (Sandbox Code Playgroud)

NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
Run Code Online (Sandbox Code Playgroud)

AppTheme在AndroidManifast.xml中定义


Kru*_*nal 13

因为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>
Run Code Online (Sandbox Code Playgroud)


现在为您的启动画面活动实现相同的主题样式 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>
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述


Mah*_*esh 11

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

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Run Code Online (Sandbox Code Playgroud)


Ane*_*kur 11

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

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

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);
Run Code Online (Sandbox Code Playgroud)


and*_*per 10

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

    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
Run Code Online (Sandbox Code Playgroud)


No *_*one 10

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

 <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>
Run Code Online (Sandbox Code Playgroud)

之后,将此样式名称引用到您不希望看到标题栏的特定活动的androidManifest.xml中,如下所示.

<activity android:name=".youractivityname"
     android:theme="@style/AppTheme.NoActionBar">
</activity>
Run Code Online (Sandbox Code Playgroud)


Cha*_*lie 8

我相信在2020 年只有一个答案

将以下行添加到styles.xml

<item name="windowNoTitle">true</item>
Run Code Online (Sandbox Code Playgroud)


cpr*_*ack 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);
}
Run Code Online (Sandbox Code Playgroud)


Mon*_*ska 7

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

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

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);
Run Code Online (Sandbox Code Playgroud)


Rah*_*hul 7

我更喜欢:-

  • 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>
Run Code Online (Sandbox Code Playgroud)

在 onCreate 方法中的 super.onCreate(savedInstanceState) 之后也放下面的代码

super.onCreate(savedInstanceState)    
this.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
Run Code Online (Sandbox Code Playgroud)


Les*_*ter 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>
Run Code Online (Sandbox Code Playgroud)

这是剪辑拍摄(见高亮代码): 在此输入图像描述


Sam*_*Sam 6

这解决了我的问题

在清单中我的活动:

<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>
Run Code Online (Sandbox Code Playgroud)

在"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>
Run Code Online (Sandbox Code Playgroud)


Shy*_*dda 6

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

在Manifest的活动标签中:

android:theme="@style/AppTheme.NoActionBar"
Run Code Online (Sandbox Code Playgroud)

在setContentView之前的Activity.java中:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

//删除标题栏

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//删除通知栏

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

注意:您需要先保留这些线setContentView


小智 5

如果你按照用户YaWDoug Paul所说的去做,那么你必须记住在调用 setContentView 之前必须设置窗口功能。如果没有,你会得到一个例外。


Dzh*_*eyt 5

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

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

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

super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)

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

getActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 5

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

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

在oncreate()方法中.

之前:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
Run Code Online (Sandbox Code Playgroud)

(不仅仅是在setContentView之前)如果不这样做你将获得forceclose.+1这个答案.


Tar*_*rik 5

这就是完整代码的样子。注意 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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Sam*_*van 5

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

<activity
        android:name=".activities.MainActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>
Run Code Online (Sandbox Code Playgroud)