如何使用现有的自定义主题隐藏 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">

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

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

我现在做了以下工作。

我声明了一种样式,该样式继承了我的常规样式中的所有内容,然后禁用了 titleBar。

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

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

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

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

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

最后,在创建所有这些文件之后,打开您的AndroidManifiedt.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">

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

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

只是改变

public class MainActivity extends ActionBarActivity {

到 Activity 或 FragmentActivity

public class MainActivity extends Activity  {

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

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

它以材料设计兼容性操作栏样式为例。

如果您使用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">

上面的示例显然会覆盖您现有的应用程序主题,如果您已有主题,则向其中添加<item name="android:windowNoTitle">true</item>

什么对我有用:

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. 在清单中继承样式:

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

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

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

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

没有标题 / 标题栏了。只需将其放置在<application>...</application><activity>...</activity>这取决于您是否要在整个应用程序中还是仅在特定活动中使用它。

创建如下主题。

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