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

问题描述 投票:841回答:35

我想隐藏一些活动的标题栏。问题是我将一种风格应用于我的所有活动,因此我不能简单地将主题设置为qazxsw poi。

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

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

android android-layout titlebar
35个回答
1037
投票

在你的@android:style/Theme.NoTitleBar方法中这样做。

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


17
投票

创建如下主题。

<activity>...</activity>

16
投票

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

在AppTheme内(styles.xml)


14
投票

只需在主要活动<item name="android:windowNoTitle">true</item>方法中使用getActionBar().hide();


13
投票

如果从onCreate()替换定义,您只需要在Style.xml中更改AppTheme样式

DarkActionBar

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

NoActionBar

AppTheme在AndroidManifast.xml中定义


12
投票

对于<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ,以下解决方案为我工作:

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>


11
投票

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

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

enter image description here

10
投票

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

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

10
投票

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

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

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

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

10
投票

在您的<activity android:name=".youractivityname" android:theme="@style/AppTheme.NoActionBar"> </activity> 方法中,使用以下代码段:

onCreate

7
投票

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

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

509
投票

你可以修改你的Activity

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


7
投票

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

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

6
投票

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

这是代码:

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

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

这里是剪辑(见高亮代码):<?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>


6
投票

这解决了我的问题

在清单中我的活动:

enter image description here

在“AppTheme”名下的风格:

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

5
投票

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

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

在oncreate()方法中。

之前:

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

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


5
投票

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

在Manifest的活动标签中:

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

在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); 之前保留这些线


4
投票

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

一。已经在setContentView中设置了Window标志,在这种情况下,您可能希望使用以下命令顺序:

super.onCreate(savedInstanceState);

二。您在TitleBar中有Back / Up按钮,这意味着当前活动是另一个活动的分层子项,在这种情况下,您可能想要在this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); 方法中注释掉或删除这行代码。

onCreate

4
投票

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

getActionBar().setDisplayHomeAsUpEnabled(true);

4
投票

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

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

3
投票

如果您执行YaW和Doug Paul所说的用户,那么您必须记住在调用setContentView之前必须设置窗口功能。如果没有,你会得到一个例外。


3
投票

添加清单文件,

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

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

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

377
投票

我现在做了以下事情。

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

Activity

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

要将样式应用于特定的Activity,请打开<style name="generalnotitle" parent="general"> <item name="android:windowNoTitle">true</item> </style> 并将以下属性添加到AndroidManifest.xml标记中;

activity

2
投票

咳咳,您可以将主题应用于 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 中的个别活动,例如无标题。换句话说,将其从应用程序标记中取出,打开标记声明并将其放入所需的活动标记中。


164
投票

我不喜欢<activity android:theme="@style/generalnotitle"> 因为标题栏短暂出现,然后消失。

我也不喜欢this.requestWindowFeature(Window.FEATURE_NO_TITLE);,因为我丢失了新设备的用户已经习惯的所有3.0+ Holo更改。所以我遇到了这个解决方案。

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

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

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

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

如果您的目标是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"></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>

最后,创建所有这些文件后,打开AndroidManifiest.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>

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

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

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


100
投票

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

android:theme="@style/Theme.FullScreen"文件中:

  1. 如果要为应用中的所有活动删除它,请在manifest.xml中添加以下内容: application
  2. 或者针对特定活动: <application android:theme="@android:style/Theme.Black.NoTitleBar">

49
投票

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


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

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

似乎这也有效:

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

到Activity或FragmentActivity

public class MainActivity extends ActionBarActivity {

然而,我可以使用材料设计使其看起来不够好,而不是删除动作栏:public class MainActivity extends Activity {

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

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


43
投票

如果您使用https://gist.github.com/shimondoodkin/86e56b3351b704a05e53,当活动通过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">


34
投票

什么对我有用:

1- in styles.xml:

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

2-在MainActivity中

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>
  1. 在manifest中继承样式: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); //<< this setContentView(R.layout.activity_main); }

23
投票

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

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

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

没有标题/标题栏了。只需将它放在android:theme="@style/Theme.AppCompat.NoActionBar" <application>...</application>中,取决于您是否(在整个应用程序中)或仅仅是特定活动。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.