web-dev-qa-db-ja.com

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

私は私の活動のいくつかのためにタイトルバーを隠したいです。問題は、すべてのアクティビティにスタイルを適用したことです。したがって、テーマを単に@Android:style/Theme.NoTitleBarに設定することはできません。

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

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

840
Janusz

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

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

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

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

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

<activity
    Android:theme="@style/generalnotitle">
375
Janusz

これを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); 

thisActivityを参照します。

1032
YaW

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"を使用してください。

注: 以前に 'default'ビューを使用したことがある場合は、おそらく親クラスもAppCompatActivityからActivityに変更する必要があります。

507
Redax

タイトルバーが少しの間表示されてから消えるので、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>

次に、 res/values-v11 を別の styles.xml ファイルと一緒に作成します(これもすでに存在している可能性があります)。そのファイルに次のコードを配置します。

<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以上をターゲットにしているのであれば、 res/values-v14 フォルダーをもう一つの styles.xml ファイルと一緒に作成してください(はい、既にそこにあるかもしれません)。そのファイルに次のコードを配置します。

<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タグ、またはアプリケーション全体に適用したい場合はapplicationタグに。

今すぐあなたのユーザーはあなたが望むスクリーンレイアウトで彼らのデバイスバージョンに関連したテーマを得るでしょう。

P.S値をAndroid:theme="@style/Theme.FullScreen"に変更しても同じ効果が得られますが、通知バーも削除されます。

164
Devin Stewart

開発者のAndroidページに記載されているように、タイトルバーは2つの方法で削除できます。

manifest.xmlファイルで:

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

    <application Android:theme="@Android:style/Theme.Black.NoTitleBar">
    
  2. または特定の活動のために:

    <activity Android:theme="@Android:style/Theme.Black.NoTitleBar">
    
100
whiteShadow

正しい答えは、おそらく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 {

アクティビティまたはFragmentActivityへ

public class MainActivity extends Activity  {

しかし、私はそれが材料設計を使用してアクションバーを削除しないで十分によく見えるようにすることができます: https://Gist.github.com/shimondoodkin/86e56b3351b704a05e53

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

それは材料設計の互換性のあるアクションバーのスタイルによるものです。

48
Shimon Doodkin

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>をそれに追加してください。

43
raj c

何が私のために働く:

1 - styles.xmlで:

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

MainActivityの2 -

@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">
    
34
Flowra

私はすべてのそれらの高い支持率の高い回答を使用しようとしたときに私のアプリは常にクラッシュしました。 (私はそれが "@ Android:style"と関係があると思いますか?)

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

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

ヘッダー/タイトルバーはもうありません。あなたがそれを<application>...</application>または<activity>...</activity>に配置するのは、あなたがそれをアプリ全体の中で望んでいるのか、それとも特定のアクティビティの中だけで望んでいるのかによります。

20

以下のようにテーマを作成してください。

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

追加する

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

appTheme(styles.xml)内

16
nijas

メインアクティビティのgetActionBar().hide();メソッドでonCreate()を使うだけです。

14
Anas Al Hamdan

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

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

NoActionBar

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

androidManifast.xmlに定義されているAppTheme

13
Daniel Levi

あなたのJavaファイルでこのコードを使うことができます

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

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);
10
Aneh Thakur

onCreateメソッドで、次のコードを使用します。

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

あなたが使用するテーマのためにそれらの両方を追加してください:

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

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

10
Krunal

このスタイルを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>
10
No one

私はサポートウィジェットToolbar v7を使っています。だから、タイトルを削除したり隠したりできるようにするには、これを書く必要があります。

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

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

あるいは、いつでもタイトルバーを表示/非表示にしたい場合は、

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

私の場合は、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

6
Lester

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

明らかに私の活動:

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

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

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この答え。

5
David

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

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

すなわち

//タイトルバーを削除

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//通知バーを削除

this.getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN、WindowManager.LayoutParams.FLAG_FULLSCREEN);

_ note _ setContentViewの前にこれらの行を保存する必要があります

5
Shylendra Madda

これが完全なコードの外観です。 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
Tarik

AndroidManifest.xmlのアクティビティにtheme @ style/Theme.AppCompat.Light.NoActionBarを次のように追加します。

<activity
        Android:name=".activities.MainActivity"
        Android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>
4
Samuel Ivan

このエラーが発生する理由は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内に[戻る]/[上へ]ボタンがあります。つまり、現在のアクティビティは別のアクティビティの階層的な子になります。その場合、onCreatename__メソッド内からこのコード行をコメントアウトまたは削除します。

getActionBar().setDisplayHomeAsUpEnabled(true);
4
Dzhuneyt

ユーザーが{YaW}とDoug Paulと言うようなことをする場合は、setContentViewを呼び出す前にウィンドウ機能を設定する必要があることに留意する必要があります。そうでない場合は、例外が発生します。

3
fergerm

最も明白なファイルに追加する、

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

javaファイルに次の行を追加してください。

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
3
Kunal Dharaiya

ええと、タイトルなしのように _ xml _ で個々のアクティビティにテーマを適用することができます。つまり、アプリケーションタグから取り出し、タグ宣言を開いて目的のアクティビティタグに配置します。

2
Fred Grott

Appテーマの親タグを「Theme.AppCompat.Light.NoActionBar」に変更するだけです。

2
Cloy

この記事にはそれについての言及がありますが、誰もそれを明示的に述べていないので、多分これは人々に時間を節約するでしょう。私のようで、ActionBarActivityを拡張する1つのルートクラスを拡張する複数のクラスがある場合、そのアクティビティをNoTitleBar/NoActionBarに設定しようとするとエラーが発生することはすぐにはわかりません。特に、

「このアクティビティでは、Theme.AppCompatテーマ(または子孫)を使用する必要があります」

これを修正してActivityへの拡張を変更できます。

1
farnett

Android StudioのドキュメントのWindowManager.LayoutParamsには、FLAG_FULLSCREENは「ウィンドウフラグ:このウィンドウが表示されている間はすべてのスクリーン装飾(ステータスバーなど)を隠す」と書かれています。そのため、このフラグを設定してもコンテンツが画面いっぱいに表示されることはありません。

0
Lawn

私はAndroid Xamarinを使用していて、これは私のために働きました。

SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
0
jase

@YaWの解決策を使用して、アクティビティからタイトルと通知を削除しました。しかし、ダイアログを表示するとタイトルと通知が表示されます。したがって、これをダイアログに適用するには、以下に示すようにダイアログをサブクラス化します。

public class MyDialog extends Android.app.Dialog{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mydialog);
    }    
}
0
Chris Sprague