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

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

使用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是指Activity

你可以修改你的AndroidManifest.xml

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

您可以在项目中的每个活动中使用它。

我现在做了以下。

我声明了一个风格,inheritance我的一般风格,然后禁用titleBar。

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

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

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

我也不喜欢android:theme="@android:style/Theme.NoTitleBar"因为我失去了新设备用户习惯的3.0+全息变化。 所以我遇到了这个解决scheme。

res / values文件夹中创build一个名为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文件创build一个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文件创build一个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> 

最后,创build所有这些文件,打开你的AndroidManifiest.xml文件,你可以添加代码:

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

如果您希望应用程序应用于整个应用程序,则将其添加到您不需要标题的活动的标签或应用程序标签。

现在,您的用户将获得与您的设备版本相关的主题与您所需的屏幕布局。

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

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

manifest.xml文件中:

  1. application添加以下内容,如果您想要删除application中的所有活动:

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

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

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

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

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

正确的答案可能是不扩展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> 

我可以像Scott Biggs写的那样做。 这种作品。 那么除了没有主题。 我的意思是设置菜单的背景是透明的:

只是改变

 public class MainActivity extends ActionBarActivity { 

活动或片段活动

 public class MainActivity extends Activity { 

但是,我可以使它看起来不错,使用材料devise,而不是删除操作栏: https ://gist.github.com/shimondoodkin/86e56b3351b704a05e53

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

它是由材料devise兼容性actionbar造型的例子。

创build一个主题如下。

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

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

里面的AppTheme(styles.xml)

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

什么对我有用:

1-在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. 在清单中inheritance风格:

    <activity android:name =“。MainActivity”android:theme =“@ style / generalnotitle”>

你可以在你的java文件中使用这个代码

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

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

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

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

在你的onCreate方法中,使用下面的代码片段:

 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

如果从DarkActionBarreplace定义,只需要在Style.xml中更改AppTheme样式

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

NoActionBar

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

AndroidManifast.xml中定义的AppTheme

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

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

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

没有标题/标题栏了。 只要将它放置在<application>...</application><activity>...</activity>根据您是否需要在整个应用程序或特定活动中使用它。

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

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

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

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

之后,将这个样式名称引入您的androidManifest.xml文件中,在其中您不希望看到titlebar的特定活动,如下所示。

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

首先回答是angular闪石。 这里是我的解释:添加:

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

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

这里是剪辑拍摄(请参阅重点代码): 在这里输入图像描述

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

一。 窗口标志已经设置在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 / Upbutton,这意味着当前活动是另一个活动的分层子组件,在这种情况下,您可能需要从onCreate方法中注释掉或删除这行代码。

 getActionBar().setDisplayHomeAsUpEnabled(true); 

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

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

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

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

这解决了我的问题

在清单我的活动:

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

join鲜明的文件,

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

将下面这行添加到你的java文件中,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

如果你做YaWDoug Paul的用户,那么你必须记住在调用setContentView之前必须设置窗口的特性。 如果没有,你会得到一个例外。

只需将您的应用主题的父标签更改为“Theme.AppCompat.Light.NoActionBar”

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

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

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

“你需要在这个活动中使用Theme.AppCompat主题(或后代)”

你可以修复这个改变延伸到活动。