2009-06-13 17 views
25

est-il un moyen de cacher le titre de la fenêtre de sorte qu'il ne sera pas affichée en mode plein écran (Masquage du titre en mode plein écran?

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

) mais apparaîtra 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.

+0

Alors vous voulez pouvoir l'allumer et l'éteindre à volonté? –

+0

Oui. Pour être plus précis, je veux montrer une barre de progression, mais cela est couplé avec le titre. – yanchenko

Répondre

57

La façon dont je gère dans mes jeux Android est d'appeler la ligne suivante dans le onCreate() de mon activité

requestWindowFeature(Window.FEATURE_NO_TITLE); 

Je peux alors tourner la pleine capacité hors écran et en utilisant le code suivant dans ma classe d'activité (habituellement appelée à partir d'une option de menu) (la variable m_contentView est la vue depuis findViewById() en utilisant l'identifiant que vous avez utilisé lors de l'appel 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 dites-vous

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

?

:: EDIT ::

Eh bien, si vous essayez de montrer dynamiquement et se cacher 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 Une chose que vous pourriez faire est de mettre en place votre propre barre de titre et de montrer et de masquer de façon dynamique que ... J'ai mis en place cet exemple qui devrait être configurez-vous sur la bonne voie

Voici le fichier de configuration

<?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 pour l'activité principale qui vous permettra de basculer notre coutume barre de titre et de

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

Il ne semble pas parfait, mais vous pouvez toujours jouer avec les mise en page un peu plus pour le faire.

alt text http://i39.tinypic.com/120sfp1.png

Mon autre pensée est que si vous voulez juste pour cacher tout 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(); 
} 
+0

Parce que j'ai besoin de passer l'application du plein écran à un mode «normal» avec le titre à un moment donné. – yanchenko

+0

@snctln: Désolé, je n'ai pas compris votre description de la variable 'm_contentView'. Ce que j'ai fait dans mon oncreate était 'setContentView (R.layout.birdview)'. Quel serait mon 'm_contentView'? J'ai essayé 'findViewById (R.layout.birdview) .requestLayout()' mais j'ai obtenu une exception de pointeur nul. –

+0

@Luis A. Florit: Vous devez rechercher 'android.R.id.content' - il est le plus élevé parent de la hiérarchie de vue (créée en activité en appelant la méthode' setContentView de() ') –

1

ce n'est pas possible selon les docs et le google android-developers. Pour mettre en œuvre cela, vous devez ajouter un élément de mise en page «titre-barre» avec votre barre de texte et de progression et masquer/afficher lorsque vous en avez besoin. en ce moment - pas d'autre moyen de contourner, puisque le contrôle de la barre de titre peut être fait seulement avant l'appel setContentView et pas changé après.

10
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

+2

qui a voté vers le bas? Si ce code ne fonctionne pas je ne le donnerais jamais ici ... vous pouvez essayer vous-même .. travaillé à l'émulateur 1.6 et 2.2 et sur mon Hero 2.1 – David

11

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

requestWindowFeature(Window.FEATURE_NO_TITLE) 

Pour désactiver la barre de notification haut (donc une demande au gestionnaire d'applications Android pour permettre Fullscreen)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

Hope this helps quelqu'un qui veut connaître la différence !!

13

Ajout android:theme="@android:style/Theme.NoTitleBar.Fullscreen" à étiquette d'application dans le fichier manifeste fera tout fullscreen activité.

+1

Notez que cela fonctionne également dans une étiquette de manifeste d'une activité individuelle. – kungphu

3

Sur Android 3+ il peut être easilyy obtenue en appelant getActionBar().hide() et getActionBar().show() pour respectivement afficher et masquer la norme ActionBar

Sur Android 1,2, la meilleure solution (je suppose) est de mettre en œuvre Voir sur mesure pour yout " barre de titre "et le cacher sur demande (bien sûr, en appelant au requestWindowFeature(Window.FEATURE_NO_TITLE); au début).

+0

'getActionBar(). Hide()' fonctionnait parfaitement. – sparticvs