web-dev-qa-db-fra.com

Comment masquer la barre de titre d'une activité XML avec un thème personnalisé existant

Je veux masquer la barre de titre pour certaines de mes activités. Le problème est que j'ai appliqué un style à toutes mes activités. Par conséquent, je ne peux pas simplement définir le thème sur @Android:style/Theme.NoTitleBar.

L'utilisation du thème NoTitleBar en tant que parent de mon style supprime la barre de titre de toutes mes activités.

Puis-je définir un élément de style sans titre quelque part?

848
Janusz

J'ai maintenant fait ce qui suit.

J'ai déclaré un style héritant de tout de mon style général, puis désactivant la barre de titre.

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

Maintenant, je peux définir ce style pour chaque activité dans laquelle je souhaite masquer la barre de titre, en remplaçant le style au niveau de l'application et en héritant de toutes les autres informations de style. Aucune duplication dans le code de style.

Pour appliquer le style à une activité particulière, ouvrez AndroidManifest.xml et ajoutez l'attribut suivant à la balise activity.

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

Faites cela dans votre méthode 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 fait référence à la Activity.

1041
YaW

Vous pouvez modifier votre AndroidManifest.xml:

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

ou utilisez Android:theme="@Android:style/Theme.Black.NoTitleBar" si vous n'avez pas besoin d'une activité plein écran.

Remarque: Si vous avez déjà utilisé une vue 'par défaut' auparavant, vous devriez probablement aussi changer la classe parente de AppCompatActivity à Activity.

510
Redax

Je n'aime pas la this.requestWindowFeature(Window.FEATURE_NO_TITLE); parce que la barre de titre apparaît brièvement, puis disparaît.

Je n'aime pas non plus le Android:theme="@Android:style/Theme.NoTitleBar" parce que j'ai perdu toutes les modifications 3.0+ Holo auxquelles les utilisateurs des nouveaux appareils se sont habitués. Alors je suis tombé sur cette solution.

Dans votre dossier res/values, créez un fichier nommé styles.xml (s'il n'existe pas déjà). Dans ce fichier, placez le code suivant:

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

Créez ensuite un fichier res/values-v11 avec un autre fichier styles.xml (une fois encore, cela peut déjà exister). Dans ce fichier, placez le code suivant:

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

Et si vous ciblez 4.0+, créez un dossier res/values-v14 avec encore un autre fichier styles.xml (Oui, il est peut-être déjà là). Dans ce fichier, placez le code suivant:

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

Enfin, avec tous ces fichiers créés, ouvrez votre fichier AndroidManifiest.xml, vous pouvez ajouter le code:

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

à la balise d'activité de l'activité pour laquelle vous ne voulez pas de titre ou à la balise d'application si vous souhaitez qu'elle s'applique à l'ensemble de l'application.

Désormais, vos utilisateurs obtiendront les thèmes associés à la version de leur appareil avec la disposition d'écran souhaitée.

P.S. Changer la valeur en Android:theme="@style/Theme.FullScreen" aura le même effet, mais supprimera également la barre de notification.

165
Devin Stewart

La barre de titre peut être supprimée de deux manières, comme indiqué sur la page du développeur Android:

Dans le fichier manifest.xml:

  1. Ajoutez les éléments suivants dans application si vous souhaitez le supprimer pour toutes les activités d'une application:

    <application Android:theme="@Android:style/Theme.Black.NoTitleBar">
    
  2. Ou pour une activité particulière:

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

la bonne réponse est probablement de ne pas étendre ActionbarActivity plutôt que d'étendre simplement l'activité


si vous utilisez toujours l'activité actionbar, cela semble fonctionner:

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

semble que ça marche aussi:

styles.xml:

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

je pourrais faire comme Scott Biggs a écrit. ce genre de travaux. sauf qu'il n'y a pas de thème alors. Je veux dire que l’arrière-plan du menu des paramètres est transparent:

il suffit de changer

public class MainActivity extends ActionBarActivity {

à Activité ou FragmentActivité

public class MainActivity extends Activity  {

cependant, je pourrais lui donner une apparence suffisante en utilisant la conception matérielle sans supprimer la barre d’action: https://Gist.github.com/shimondoodkin/86e56b3351b704a05e5

  1. définir l'icône de l'application
  2. définir les couleurs de la barre d'action pour correspondre à la conception.
  3. définir l'icône dans le menu des paramètres
  4. ajouter plus d'icônes (boutons en haut)

il s'agit d'un exemple de style de barre d'actions de compatibilité de conception de matériaux.

51
Shimon Doodkin

Si vous utilisez this.requestWindowFeature(Window.FEATURE_NO_TITLE), vous pourrez toujours voir la barre de titre un instant pendant le lancement de l'animation lorsque l'activité commencera par onCreate. Si vous utilisez @Android:style/Theme.Black.NoTitleBar comme indiqué ci-dessous, la barre de titre ne s'affichera pas lors du lancement de l'animation.

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

l'exemple ci-dessus remplacera évidemment votre thème d'application existant. Si vous avez un thème existant, ajoutez-y <item name="Android:windowNoTitle">true</item>.

43
raj c

ce qui fonctionne pour moi:

1- dans styles.xml:

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

2- dans MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
  1. dans manifest hériter du style:

    <activity Android:name=".MainActivity" Android:theme="@style/generalnotitle">
    
36
Flowra

lorsque j'ai essayé d'utiliser toutes ces réponses très votées, mon application s'est toujours effondrée. (Je pense que cela a quelque chose à voir avec le "@Android: style"?)

La meilleure solution pour moi était d'utiliser ce qui suit:

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

Pas d'en-tête/barre de titre plus. Il suffit de le placer dans le <application>...</application> ou <activity>...</activity> selon si vous (ne le souhaitez pas) dans l'application entière ou dans une activité spécifique.

24
TryToSolveItSimple

Créez un thème comme ci-dessous.

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

Ajouter

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

dans AppTheme (styles.xml)

16
nijas

Utilisez simplement getActionBar().hide(); dans votre méthode d'activité principale onCreate().

14
Anas Al Hamdan

Il vous suffit de changer le style AppTheme dans Style.xml si vous remplacez la définition de DarkActionBar

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

à NoActionBar

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

le AppTheme défini dans AndroidManifast.xml

13
Daniel Levi

Pour AppCompat, la solution suivante a fonctionné pour moi:

Ajoutez un nouveau style de thème sans barre d’action dans votre styles.xml et définissez 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>


Maintenant, implémentez le même style de thème pour votre activité d'écran de démarrage dans 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>

Voici le résultat:

enter image description here

12
Krunal

Vous pouvez utiliser ce code dans votre fichier Java

ajoutez cette ligne avant de définir ou de charger votre vue

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

Dans votre méthode onCreate, utilisez l'extrait suivant:

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

Ajoutez les deux pour le thème que vous utilisez:

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

Ajouter ce style à votre fichier style.xml

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

Après cela, faites référence à ce nom de style dans votre androidManifest.xml dans une activité particulière dans laquelle vous ne voulez pas voir la barre de titre, comme ci-dessous.

<activity Android:name=".youractivityname"
     Android:theme="@style/AppTheme.NoActionBar">
</activity>
10
No one

J'utilise un widget d'assistance Toolbar v7. Donc, pour pouvoir supprimer ou masquer le titre, nous devons écrire ceci.

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

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

Ou si vous souhaitez masquer/afficher la barre de titre à tout moment:

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

Cela a résolu mon problème

En manifeste mon activité:

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

Dans le style sous le nom "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
Sam

Dans mon cas, si vous utilisez Android studio 2.1 et que la version de votre SDK de compilation est 6.0, accédez simplement à votre fichier manifest.xml et modifiez le code suivant:

Voici le code:

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

Et voici le snip shoot (voir le code en surbrillance): enter image description here

6
Lester

La première réponse est l'amphibole. voici mon expliquer: ajouter:

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

dans la méthode oncreate ().

avant:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);

(pas seulement avant setContentView) si vous ne le faites pas, vous obtiendrez forcément. +1 cette réponse.

5
David

Pour masquer le titre et la barre d’action, j’ai fait ceci:

Dans la balise d'activité du manifeste:

Android:theme="@style/AppTheme.NoActionBar"

Dans Activity.Java avant setContentView:

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

c'est à dire.,

// Supprimer la barre de titre

this.requestWindowFeature (Window.FEATURE_NO_TITLE);

// Supprimer la barre de notification

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

NOTE: Vous devez conserver ces lignes avant setContentView

5
Shylendra Madda

Voici à quoi ressemble le code complet. Notez l'importation de 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

Ajouter theme @ style/Theme.AppCompat.Light.NoActionBar dans votre activité sur AndroidManifest.xml comme ceci

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

J'ai trouvé deux raisons pour lesquelles cette erreur pourrait se produire.

n. Les indicateurs de fenêtre sont déjà définis dans super.onCreate(savedInstanceState);, auquel cas vous pouvez utiliser l'ordre de commandes suivant:

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

super.onCreate(savedInstanceState);

Deux. Vous avez le bouton Back/Up à l'intérieur de la barre de titre, ce qui signifie que l'activité actuelle est un enfant hiérarchique d'une autre activité. Dans ce cas, vous pouvez vouloir commenter ou supprimer cette ligne de code de l'intérieur. la méthode onCreate.

getActionBar().setDisplayHomeAsUpEnabled(true);
4
Dzhuneyt

Si vous faites ce que les utilisateurs YaW et Doug Paul, vous devez savoir que les fonctionnalités de la fenêtre doivent être définies avant d'appeler setContentView. Sinon, vous obtiendrez une exception.

3
fergerm

ajouter dans le fichier manifeste,

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

ajouter la ligne suivante dans le fichier ur Java,

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

Ahem, vous pouvez appliquer des thèmes à des activités individuelles dans XML tels qu’aucun titre. En d'autres termes, retirez-le de votre balise d'application, ouvrez la déclaration de balise et insérez-la dans la balise d'activité souhaitée.

2
Fred Grott

Changez simplement la balise parent de votre thème d'application en "Theme.AppCompat.Light.NoActionBar"

2
Cloy

J'utilise Android Xamarin et cela a fonctionné pour moi.

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

Il y a des mentions à ce sujet dans ce billet mais personne ne l’aborde explicitement, alors peut-être que cela fera gagner du temps aux gens. Si vous êtes comme moi et que plusieurs classes étendent une classe racine qui étend ActionBarActivity, il n'est peut-être pas immédiatement évident qu'essayer de définir cette activité sur un NoTitleBar/NoActionBar provoquera une erreur, plus précisément:

"Vous devez utiliser un thème (ou un descendant) Theme.AppCompat avec cette activité"

Vous pouvez résoudre ce problème en modifiant le paramètre s'étend à Activité.

1
farnett

WindowManager.LayoutParams in Android La documentation de Studio indique que FLAG_FULLSCREEN est "Indicateur de fenêtre: masque toutes les décorations d'écran (telles que la barre d'état) lorsque cette fenêtre est affichée". donc ce drapeau ne fait pas que mon contenu remplisse tout l'écran.

0
Lawn

J'ai utilisé la solution de @YaW pour supprimer le titre et la notification de mon activité. Mais, le titre et la notification apparaîtront lors de l'affichage d'un dialogue. Donc, pour appliquer cela à une boîte de dialogue, sous-classe la boîte de dialogue comme indiqué ci-dessous:

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