Comment cacher la barre de titre pour une activité en XML avec le thème personnalisé existant

StackOverflow https://stackoverflow.com/questions/2591036

Question

Je veux cacher la barre de titre pour certains de mes activités. Le problème est que j'ai appliqué un style à toutes mes activités, donc je ne peux pas définir simplement le thème @android:style/Theme.NoTitleBar.

Utilisation du NoTitleBar thème en tant que parent pour mon style supprimerait la barre de titre de toutes mes activités.

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

Était-ce utile?

La solution 3

Je maintenant ai fait ce qui suit.

Je déclarai un style héritant tout de mon style général puis désactiver la barre de titre.

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

Maintenant, je peux définir ce style à chaque activité où je veux cacher la barre de titre de l'application large en écrasant le style et héritant toutes les autres informations de style, à cet effet pas de double emploi dans le code de style.

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

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

Autres conseils

Pour ce faire, 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.

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é en plein écran.

Remarque:. Si vous avez utilisé une vue « par défaut » avant, vous devriez probablement changer la classe parente de AppCompatActivity à Activity

Je n'aime pas le 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 je perdais tous les 3.0+ Holo changements que les utilisateurs des nouveaux appareils ont pris l'habitude. Donc, je suis tombé sur cette solution.

Dans votre res / valeurs dossier créer un fichier appelé styles.xml (si elle 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>

Ensuite, créez un res / valeurs v11 avec un autre styles.xml fichier (Encore une fois 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 res / valeurs v14 dossier avec un autre styles.xml fichier (Oui, il peut déjà être 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, tous ces fichiers créés, ouvrez votre AndroidManifiest.xml fichier que vous pouvez ajouter le code:

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

à la balise d'activité de l'activité que vous voulez pas de titre pour l'étiquette ou de l'application si vous voulez appliquer à l'ensemble de l'application.

Vos utilisateurs auront les thèmes associés à leur version de l'appareil avec la mise en page de l'écran que vous désirez.

P.S. Modification de la valeur à android:theme="@style/Theme.FullScreen" aura le même effet, mais aussi enlever la barre de notification.

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

Dans le fichier manifest.xml:

  1. Ajoutez ce qui suit dans application si vous souhaitez supprimer pour toutes les activités dans 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">
    

la bonne réponse est sans doute de ne pas prolonger ActionbarActivity étendre et non seulement l'activité


si vous utilisez encore actionbar activité semble que cela fonctionne:

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

semble que cela fonctionne aussi:

styles.xml:

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

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

juste changer

public class MainActivity extends ActionBarActivity {

à l'activité ou FragmentActivity

public class MainActivity extends Activity  {

Cependant, je pourrais le faire paraître assez bon en utilisant la conception de matériel et pas enlever le actionbar: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. icône ensemble d'application
  2. les couleurs ensemble de barre d'action à la conception correspondent.
  3. icône ensemble au menu Paramètres
  4. ajouter plus d'icônes (boutons sur le dessus)

il est par exemple de la compatibilité de la conception matériel actionbar style.

Si vous utilisez l'utilisateur this.requestWindowFeature(Window.FEATURE_NO_TITLE) sera toujours en mesure de voir la barre de titre juste pour un moment au cours de l'animation de lancement lorsque l'activité commence par onCreate. Si vous utilisez @android:style/Theme.Black.NoTitleBar comme indiqué ci-dessous, puis la barre de titre ne sera pas affiché lors de l'animation de lancement.

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

exemple ci-dessus va évidemment passer outre le thème de votre application existante, si vous avez le thème existant puis ajouter <item name="android:windowNoTitle">true</item> à elle.

ce qui fonctionne pour moi:

1 en 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 Hériter manifeste le style:

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

quand j'ai essayé d'utiliser tous ceux qui sont riches réponses upvoted mon application écrasé toujours. (Je pense qu'il a quelque chose à voir avec le "@android: le style"?)

La meilleure solution pour moi était d'utiliser les éléments suivants:

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

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

Créer 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>

Ajouter

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

AppTheme intérieur (styles.xml)

Il suffit d'utiliser getActionBar().hide(); dans votre principale méthode de onCreate() d'activité.

Vous avez juste besoin de changer de style de 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

Pour AppCompat, solution suivante a fonctionné pour moi:

Ajouter un nouveau style de thème sans barre d'action dans votre styles.xml et réglez 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 mettre en œuvre le même style de thème à 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 résultat:

 ici

Vous pouvez utiliser ce code dans votre fichier java

ajouter cette ligne avant de définir ou de charger votre point de vue

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

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

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

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

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

Ajouter ce style à votre fichier style.xml

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

Après cette référence ce nom de style dans votre AndroidManifest.xml l'activité perticular où vous ne voulez pas voir la barre de titre, comme comme ci-dessous.

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

Ou si vous voulez 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);
}

J'utilise un widget support barre d'outils v7. Ainsi, afin de pouvoir supprimer ou masquer le titre que nous devons écrire ceci.

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

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

Dans mon cas, si vous utilisez studio Android 2.1, et votre compilation version SDK est 6.0, alors allez simplement dans votre fichier manifest.xml, et de modifier 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>

est ici le tournage de snip (voir le code de surbrillance): entrer la description d'image ici

Résolu mon problème

Dans mon activité manifeste:

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

Pour masquer la fois barre de titre et d'action, je l'ai fait:

dans la balise d'activité de Manifest:

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

i.e..

// Retirez la barre de titre

  

this.requestWindowFeature (Window.FEATURE_NO_TITLE);

// Retirez la barre de notification

  

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

NOTE : Vous devez garder ces lignes avant setContentView

La première réponse est 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);

(et pas seulement avant setContentView) si ne pas le faire u obtenir FORCECLOSE. +1 cette réponse.

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

Une Les drapeaux de fenêtre sont définies déjà définies à l'intérieur super.onCreate(savedInstanceState); dans ce cas, vous pouvez utiliser l'ordre de commandes:.

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

super.onCreate(savedInstanceState);

Deux. Vous avez le dos / Haut dans 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 commenter ou supprimer cette ligne de code à partir de l'intérieur de la méthode de onCreate.

getActionBar().setDisplayHomeAsUpEnabled(true);

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

Ajouter un thème 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>

Si vous faites ce que les utilisateurs Yaw et Doug Paul par exemple, alors vous devez avoir à l'esprit que les caractéristiques de fenêtre doivent être définis avant l'appel setContentView. Sinon, vous obtiendrez une exception.

ajouter dans le fichier manifiest,

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

ajouter la ligne suivante dans votre fichier java,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

Ahem, vous pouvez appliquer des thèmes à des activités individuelles XML , comme aucun titre. En d'autres termes, le sortir de votre étiquette d'application, ouvrez la déclaration d'étiquette et de le mettre dans la balise activité souhaitée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top