web-dev-qa-db-fra.com

Masquer le titre en mode plein écran?

Existe-t-il un moyen de masquer le titre de la fenêtre afin qu'il ne s'affiche pas en mode plein écran (

getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN,
                LayoutParams.FLAG_FULLSCREEN)

) mais apparaîtra ensuite sur

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN)

?

requestWindowFeature(Window.FEATURE_NO_TITLE)

n'est pas une option bien sûr car cela ne permettra pas de le récupérer.

25
yanchenko

La façon dont je gère cela dans mes Android consiste à appeler la ligne suivante dans le onCreate () de mon activité

requestWindowFeature(Window.FEATURE_NO_TITLE);

Je peux ensuite activer et désactiver la fonction plein écran en utilisant le code suivant dans ma classe d'activité (généralement appelé à partir d'une option de menu) (la variable m_contentView est la vue de findViewById () en utilisant l'ID que vous avez utilisé lors de l'appel de setContentView () dans votre sur créer)

private void updateFullscreenStatus(boolean bUseFullscreen)
{   
   if(bUseFullscreen)
   {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    }
    else
    {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    m_contentView.requestLayout();
}

J'utilise cette technique dans tous mes jeux sans problème.

Pourquoi dis-tu

requestWindowFeature (Window.FEATURE_NO_TITLE); n'est pas une option bien sûr

?

::ÉDITER::

Eh bien, si vous essayez de l'afficher et de le masquer dynamiquement pendant la durée de l'activité, je ne sais pas si vous pouvez le faire avec le titre officiel de la fenêtre en raison de la note qui a été mentionnée sur les fonctionnalités de la fenêtre qui doivent être définies avant setContentView () est appelé ( link )

Une chose que vous pourriez faire est d'implémenter votre propre barre de titre et d'afficher et de masquer dynamiquement ... J'ai mis en place cet exemple qui devrait vous mettre sur la bonne voie

Voici le fichier de mise en page

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:orientation="vertical"
    Android:fadingEdgeLength="0sp"
    >

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/myTitleBarLayout" 
        Android:layout_width="fill_parent" 
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        >

        <TextView
            Android:id="@+id/myTitleBarTextView"
            Android:layout_width="fill_parent" 
            Android:layout_height="wrap_content"
            Android:text="@string/app_name"
            Android:paddingTop="4dip"
            Android:paddingBottom="4dip"
            Android:paddingLeft="6dip"
            Android:textStyle="bold"
            Android:shadowColor="#BB000000"
            Android:shadowRadius="3.0"
            Android:shadowDy=".25"

        />

        <View
            Android:layout_width="fill_parent"
            Android:layout_height="1dip"
            Android:background="#CCEEEEEE"
            Android:padding="10dip"
        />
    </LinearLayout>

    <ScrollView  xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent" 
        Android:layout_height="fill_parent"
        Android:layout_weight="1"
        >

        <!-- Insert your regular layout stuff here -->

        <Button Android:id="@+id/toggle_title_button" 
            Android:layout_width="wrap_content" 
            Android:layout_height="wrap_content"
            Android:text="Toggle Title" 
        />
    </ScrollView>
</LinearLayout>

Et voici le code de l'activité principale qui vous permettra d'activer et de désactiver notre barre de titre personnalisée

package com.snctln.test.HelloGridView;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.Window;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.LinearLayout;
import Android.widget.TextView;

public class HelloGridView extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);

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

        TextView tv = (TextView)this.findViewById(R.id.myTitleBarTextView);
        tv.setBackgroundColor(0xFF848284);
        tv.setTextColor(0xFFFFFFFF);

        Button toggleTitleButton = (Button)this.findViewById(R.id.toggle_title_button);

        toggleTitleButton.setOnClickListener( new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    LinearLayout ll = (LinearLayout)findViewById(R.id.myTitleBarLayout);

                    if(ll.getVisibility() == View.GONE)
                    {
                        ll.setVisibility(View.VISIBLE);
                    }
                    else
                    {
                        ll.setVisibility(View.GONE);
                    }
                }
            });
    }
}

Cela n'a pas l'air parfait, mais vous pouvez toujours jouer avec la mise en page pour le faire.

alt text

Mon autre pensée est que si vous voulez simplement tout cacher pour afficher une barre de progression, pourquoi ne pas utiliser le ProgressDialog ?

Cette classe est assez facile à utiliser ...

progressDlg = ProgressDialog.show(context, getString(R.string.progress_dialog_title_prepare), getString(R.string.progress_dialog_body_prepare));

// do long running operation

if(operationFailed)
{
    progressDlg.cancel();
}
else
{
    progressDlg.dismiss();
}
57
snctln

Ajouter Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen" à la balise d'application dans le fichier manifeste rendra chaque activité en plein écran.

13
user1154664

Pour désactiver le titre de votre application (c'est le nom de l'application)

requestWindowFeature(Window.FEATURE_NO_TITLE)

pour désactiver la barre de notification en haut (donc une demande au gestionnaire d'applications Android pour autoriser le plein écran))

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

J'espère que cela aide toute personne qui veut faire la différence !!

11
omni.present
if(useFullscreen)  
{  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);  
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);  
}  
else  
{  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);  
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);  
}  

cela a fonctionné pour moi .. à la méthode onResume

10
David

Sur Android 3+, cela peut être facilement réalisé en appelant getActionBar().hide() et getActionBar().show() pour afficher et masquer respectivement l'ActionBar standard

Sur Android 1,2 la meilleure solution (je suppose) est d'implémenter la vue personnalisée pour votre "barre de titre" et de la masquer à la demande (bien sûr, en appelant à requestWindowFeature(Window.FEATURE_NO_TITLE); au début).

3
Alex Semeniuk

cela n'est pas possible selon les documents et le groupe google des développeurs Android. pour implémenter cela, vous devez ajouter un élément de mise en page de type barre de titre avec votre texte et votre barre de progression et masquer/afficher lorsque vous en avez besoin. en ce moment - pas d'autre moyen de le contourner, car le contrôle de la barre de titre ne peut être effectué qu'avant l'appel setContentView et non modifié après.

1
reflog