提问



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


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


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

最佳参考


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


你可以修改你的AndroidManifest.xml:


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


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


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

其它参考2


我现在做了以下事情。


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


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


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


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


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

其它参考3


我不喜欢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"


如果要将其应用于整个应用程序,则为您不想要标题的Activity的Activity标记或应用程序标记。


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


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

其它参考4


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


manifest.xml文件中:



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


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

  2. 或针对特定Activity:


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


其它参考5


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





如果你仍然使用动作栏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[80]



  1. 设置应用程序图标

  2. 设置操作栏的颜色以匹配设计。

  3. 将图标设置为设置菜单

  4. 添加更多图标(顶部的按钮)



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

其它参考6


如果您使用this.requestWindowFeature(Window.FEATURE_NO_TITLE),当Activity开始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


什么对我有用:


1- in styles.xml:


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


2-在MainActivity中


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



    清单中的
  1. 继承了风格:


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


其它参考8


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


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


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


没有标题/标题栏了。只需将它放在<application>...</application><activity>...</activity>中,具体取决于您是否(不要)在整个应用程序中或仅仅是特定Activity中。

其它参考9


创建如下主题。


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





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


在AppTheme内(styles.xml)

其它参考11


只需在MainActivityonCreate()方法中使用getActionBar().hide();

其它参考12


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


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


NoActionBar


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


AppTheme在AndroidManifast.xml中定义

其它参考13


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


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


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

其它参考14


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


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

其它参考15


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


this.requestWindowFeature(Window.FEATURE_NO_TITLE);

其它参考16


对于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实现相同的主题样式


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


结果如下:


[81]

其它参考17


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


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


之后,将这个样式名称引用到你的androidManifest.xml中的特定Activity中,你不想看到标题栏,如下所示。


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

其它参考18


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


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


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


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

其它参考20


在我的例子中,如果您使用的是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>


这是剪辑(见高亮代码):
[82]

其它参考21


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


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

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

其它参考22


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


在Manifest的Activity标签中:


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


在setContentView之前的Activity.java中:


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之前保留这些行

其它参考23


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


一个。窗口标志已设置在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按钮,这意味着当前Activity是另一个Activity的分层子项,在这种情况下你可能想要注释掉或从里面删除这行代码onCreate方法。


getActionBar().setDisplayHomeAsUpEnabled(true);

其它参考24


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

其它参考25


这解决了我的问题


在清单中我的Activity:


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

其它参考26


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


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

其它参考27


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

其它参考28


添加最明显的文件,


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


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


  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

其它参考29


嗯,您可以将主题应用于XML中的各个Activity,例如无标题。换句话说,将其从应用程序标记中取出,打开标记声明并将其放入所需的Activity标记中。[83]