既存のカスタムテーマを使用してXMLでアクティビティのタイトルバーを非表示にする方法


876

一部のアクティビティでタイトルバーを非表示にしたい。問題は、すべてのアクティビティにスタイルを適用しているため、単純にテーマをに設定できないこと@android:style/Theme.NoTitleBarです。

NoTitleBarテーマをスタイルの親として使用すると、すべてのアクティビティからタイトルバーが削除されます。

タイトルなしのスタイルのアイテムをどこかに設定できますか?

回答:


1065

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ます。


7
すばらしい答えです。ただし、両方を実行する必要はありません。通知バーを削除するのはやり過ぎかもしれません。
Jim Blackler、2010

209
setContentView(R.id.x)を呼び出すに必ず配置してください。そうしないとクラッシュします。その理由はすぐにはわかりませんでした。08-13 12:47:33.561 E / AndroidRuntime(9125):java.lang.RuntimeException:Unable to start activity ComponentInfo {com.myapp / com.myapp.SplashActivity}:android.util.AndroidRuntimeException:requestFeature()を呼び出す必要がありますコンテンツを追加する前
mobibob 2010

9
requestWindowFeature()を使用しているときにコンテンツを追加した後にこの行を実行すると強制終了が発生することを本当に言及する必要があります。そして、(である、サイドノートに、XML方式は、はるかに安全であり、それはまた、あなたのコードからページ構造を分離全体最初の場所でXMLSの目的。)
b1nary.atr0phy

21
これはAPI 22を使用しても機能しません。アプリの起動時にタイトルバーがまだ表示されます。
user2966445 2016年

7
AppCompatActivityではなくActivityがActivityを拡張する場合、つまり、クラスをパブリッククラスmyActi extends Activity {}として宣言する必要がある場合に機能します
Manpreet Singh Dhillon

523

あなたはあなたを変更することができます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


1
理由はわかりません。デフォルトのプロジェクトのみを使用し、アクティビティを追加しました。オートコンプリートは機能しませんが、テーマはそこにあります。
Redax

82
android:theme="@android:style/Theme.Black.NoTitleBar"あなたがゲームを作っているのでない限り、おそらくもっと便利です
クリスS

7
または、<style name = "AppTheme" parent = "android:Theme.Light.NoTitleBar" />を使用して、テーマを明るくします。
フェルナンドJS

20
理由はわかりませんが、アプリがクラッシュしています。何か助け?
Akeshwar Jha

12
@Akeshwar:styles.xmlファイルをいじる必要があるかもしれません。たとえば、<style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar">を<style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">に変更します。その場合、AndroidManifest.xmlファイルを変更する必要はありません。(この修正を行うまで、私もクラッシュしていました。)
Brit Clousing

385

今、私は次のことをしました。

私は自分の一般的なスタイルからすべてを継承し、titleBarを無効にするスタイルを宣言しました。

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

これで、タイトルバーを非表示にしてアプリケーション全体のスタイルを上書きし、他のすべてのスタイル情報を継承するすべてのアクティビティにこのスタイルを設定できるため、スタイルコードの重複はありません。

特定のアクティビティにスタイルを適用するにはAndroidManifest.xml、次の属性を開いてactivityタグに追加します。

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

13
彼は「一般」と呼ばれるスタイルを作成し、彼はそれを拡張しているだけだと思います。自分で使用するために削除してください。
rcl

7
この質問に対する他のほとんどの回答のように同様の結果を達成するための最も明白な方法を指定するのではなく、質問に回答するための+1。それはあなたが正確な答えを得るためにあなた自身の質問に答えなければならなかったのは残念です...
ジュール

1
この答えは最高です。タイトルバーのないandroidによって提供される他のテーマを使用することもできます。おかげで共有するためのたくさん
ナレンドラパル

4
これは、プログラムによるthis.requestWindowFeature(Window.FEATURE_NO_TITLE);よりもエレガントなソリューションだと思います。この場合、タイトルの「点滅」がまだ表示されているからです
上記の

1
OPの質問へのベストアンサー:)しかし、それでも私の活動のタイトルバーは削除されません(API19)
1111161171159459134

166

this.requestWindowFeature(Window.FEATURE_NO_TITLE);タイトルバーが短時間表示されてから消えるので、私は気に入らない。

またandroid:theme="@android:style/Theme.NoTitleBar"、新しいデバイスのユーザーが慣れ親しんだ3.0以上のHoloの変更をすべて失ってしまったので、これも気に入らない。だから私はこの解決策に出くわしました。

あなたの中のres /値と呼ばれるファイル作成フォルダの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"

タイトルを付けないアクティビティのアクティビティタグ、またはアプリケーション全体に適用する場合はアプリケーションタグに追加します。

これで、ユーザーは、希望する画面レイアウトで、デバイスバージョンに関連付けられたテーマを取得します。

PS値をに変更しandroid:theme="@style/Theme.FullScreen"ても同じ効果がありますが、通知バーも削除されます。


彼らは..これはあなたが言ったことに対してうまく機能しますが、テーマを変更すると画像がぎこちなくなりました。じゃあ何をすればいいの ???
2013年

1
@arun-この方法を使用しても画像の問題は発生していません。悲鳴とはどういう意味ですか?
Devin Stewart

1
ベストアンサー.. this.requestWindowFeature(Window.FEATURE_NO_TITLE); は適切ではなく、<item name = "android:windowNoTitle"> true </ item>は元のテーマを失いました。説明をありがとう@DevinStewart ..accept +1 :)
lynndragon

5
ああ、ばかげた私!私はActionBarActivityを使用していましたが、アクションバーを削除したい場合は意味がありません!単純なActivityまたはFragmentActivityに変更すると、この素晴らしいソリューションが魅力のように機能します。
Scott Biggs 2014

1
「残念ながらYourAppが停止しました。」
クリスアリンソン

104

タイトルバーは、デベロッパーのAndroidページに記載されている2つの方法で削除できます。

manifest.xmlファイル:

  1. applicationアプリ内のすべてのアクティビティから削除する場合は、以下を追加します。

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
  2. または、特定のアクティビティの場合:

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

15
black.themeの代わりにandroid:theme = "@ android:style / Theme.DeviceDefault.NoActionBar.Fullscreen"を使用することをお勧めします。デバイスにテーマを処理させます。おかげで、私はあなたのアプローチを使用しました
Varand Pezeshkian

54

正解は、おそらく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

  1. アプリケーションのアイコンを設定
  2. デザインに合わせてアクションバーの色を設定します。
  3. アイコンを設定メニューに設定
  4. さらにアイコンを追加する(上部のボタン)

マテリアルデザインの互換性アクションバーのスタイル設定の例です。


4
ActionBarActivityをActivityに変更すると、私にとってはうまくいきました!
DritanX 2015

44

私にとって何がうまくいくか:

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

上記のように、xmlからは動作しない場合があります。正確な理由はわかりませんが、完全にはわかりませんが、getSupportActionBar().hide();onCreate(){}内で機能します
ZeePee

43

を使用している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>して、明らかに既存のアプリケーションテーマをオーバーライドします。


私のアクティビティは@android:style / Theme.Black.NoTitleBarのシングルインスタンスですが、このコードを使用すると、アクティビティが最初に作成されたときに機能します。ステータスバーを4秒間表示するだけです。これを回避するにはどうすればよいですか。ここに私の質問があります。リンクは、stackoverflow.com
Herry

29

私はこれらの高い賛成投票の回答をすべて使おうとすると、いつもアプリがクラッシュしました。(「@android:style」と関係があると思いますか?)

私にとっての最善の解決策は、以下を使用することでした:

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

ヘッダー/タイトルバーはもうありません。に配置する<application>...</application><activity>...</activity>、アプリ全体または特定のアクティビティで使用したい(望まない)かどうかに依存します。


これが最善の方法です(または唯一の方法ですか?)アプリが「AppCompatActivityを拡張する」場合。
Ferrarezi

17

以下のようにテーマを作成します。

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

16

追加

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

AppTheme(styles.xml)内



14

AppThemeから定義を置き換える場合は、Style.xmlのスタイルを変更するだけですDarkActionBar

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

NoActionBar

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

AndroidManifast.xmlで定義されたAppTheme


14

の場合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ファイルで使用できます

ビューを設定またはロードする前にこの行を追加してください

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

11

あなたにはonCreateこの方法は、以下のスニペットを使用します。

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

アプリはタイトルから始まり、非表示になり、タイトルなしのアプリが表示されます
Bachask8

10

両方を使用するテーマに追加します。

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

「残念ながらYourAppが停止しました。」
クリスアリンソン2017年

<item name="windowActionBar">false</item>アプリケーションをクラッシュさせます。@ChrisAllinsonの意味するところかもしれません
Mubashar

確認できません。私にとってはうまくいきます。
Android開発者

10

このスタイルをstyle.xmlファイルに追加します

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

その後、次のように、タイトルバーを表示したくない特定のアクティビティで、このスタイル名をandroidManifest.xmlに参照します。

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

android:コードの最初のブロックで名前の前にプレフィックスを忘れた:)
Stam Kaly

8

サポートウィジェットツールバーv7を使用しています。したがって、タイトルを削除または非表示にするには、これを記述する必要があります。

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

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

完璧な答え。
Asesha George

7

または、任意の時点でタイトルバーを表示/非表示にする場合:

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ファイルに移動して、次のコードを変更します。

これがコードです:

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

そして、ここが狙撃シュートです(ハイライトコードを参照してください): ここに画像の説明を入力してください


SOへようこそ。コードの画像を投稿するのではなく、コードを直接SOに投稿してください。
リチャードエリクソン2016年

6

これは私の問題を解決しました

マニフェストで私の活動:

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

6

タイトルとアクションバーの両方を非表示にするには、次のようにしました。

マニフェストのアクティビティタグ:

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


私はJavaやAndroidアプリの作成にそれほど慣れていないので、setContentViewの前にこれらのコード行を配置する必要があるというコメントは本当に役に立ちました。ありがとう!
カイルファンティル2018年

5

最初の答えは角閃石です。これが私の説明です:追加:

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してください。


4

このエラーが発生する理由は2つあります。

1。ウィンドウフラグは内部super.onCreate(savedInstanceState);で既に設定されています。この場合、次の順序のコマンドを使用できます。

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

super.onCreate(savedInstanceState);

二。TitleBar内に[戻る/上へ]ボタンがあります。つまり、現在のアクティビティは別のアクティビティの階層的な子です。この場合、このコード行をコメントアウトするか、onCreateメソッド内から削除します。

getActionBar().setDisplayHomeAsUpEnabled(true);

おかげで、テーマを変更せずにNoTitleとFullScreenを設定できました
Mohsen Afshin

4

これは、完全なコードがどのように見えるかです。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);
    }
}

4

このようなAndroidManifest.xmlのアクティビティにテーマ@ style / Theme.AppCompat.Light.NoActionBarを追加します

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

3

ユーザーのYaWDoug Paulの言うことを行う場合は、setContentViewを呼び出す前にウィンドウ機能を設定する必要があることを覚えておく必要があります。そうでない場合は、例外が発生します。


3

マニフェストファイルに追加、

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

次の行をur javaファイルに追加し、

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

3

私はAndroid Xamarinを使用していますが、これでうまくいきました。

SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.