首页 文章

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

提问于
浏览
814

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

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

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

30 回答

  • 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之前)如果不这样做你将获得forceclose . 1这个答案 .

  • 4

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


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

    @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

    • 设置应用程序图标

    • 设置动作栏的颜色以匹配设计 .

    • 将图标设置为设置菜单

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

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

  • 5

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

    在Manifest的活动标签中:

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

    即,

    //删除 Headers 栏

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    //删除通知栏

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

    NOTE :您需要在 setContentView 之前保留这些行

  • 16

    什么对我有用:

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

    清单中的

    • 继承了样式:
    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">
    
  • 164

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

  • 5

    我现在做了以下事情 .

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

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

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

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

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

    创建如下主题 .

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

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

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

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

  • 20

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

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

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

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

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

    如果要将其应用于整个应用程序,则为您不想要 Headers 的活动的活动标记或应用程序标记 .

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

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

  • 5

    添加最明显的文件,

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

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

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    
  • 7

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

  • 4

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

  • 46

    这解决了我的问题

    在清单中我的活动:

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

    这就是完整代码的样子 . 注意导入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);
        }
    }
    
  • 11

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

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

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

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

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

  • 371

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

    One. 已在 super.onCreate(savedInstanceState); 中设置了Window标志,在这种情况下,您可能需要使用以下命令顺序:

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

    Two. 您在TitleBar中有后退/上移按钮,这意味着当前活动是另一个活动的层次结构子项,在这种情况下,您可能希望注释掉或从 onCreate 方法中删除此行代码 .

    getActionBar().setDisplayHomeAsUpEnabled(true);
    
  • 10

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

    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);
    
    //Remove¡ing title bar
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    
  • 99

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

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

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

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

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

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

    NoActionBar

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

    AppTheme在AndroidManifast.xml中定义

  • 2

    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 .

  • 3

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

  • 17

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

    manifest.xml 文件中:

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

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

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

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

    没有 Headers / Headers 栏了 . 只需将它放在 <application>...</application><activity>...</activity> 中,具体取决于您(不)在整个应用程序中或仅在特定活动中想要它 .

  • 42

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

    Note: 如果您之前使用've used a '默认'查看,您可能还应该将父类从 AppCompatActivity 更改为 Activity .

  • 10

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

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

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

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

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

    在AppTheme内(styles.xml)

相关问题