2009-06-13 20 views
25

Gibt es eine Möglichkeit, den Fenstertitel zu verbergen, damit sie nicht im Vollbild-Modus angezeigt wird erhalten (Titel im Vollbildmodus ausblenden?

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

) aber dann auf

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN) 

erscheinen wird?

requestWindowFeature(Window.FEATURE_NO_TITLE) 

ist keine Option natürlich, da dies nicht erlauben wird, es zurück zu bekommen.

+0

Sie wollen es also nach Belieben ein- und ausschalten können? –

+0

Ja. Um genau zu sein, möchte ich eine Fortschrittsleiste zeigen, aber das ist mit Titel gekoppelt. – yanchenko

Antwort

57

So wie ich dies in meinen Android-Spielen handhaben ist die folgende Zeile in der onCreate() meine Tätigkeit

requestWindowFeature(Window.FEATURE_NO_TITLE); 

ich die Vollbild-Fähigkeit dann deaktivieren kann anrufen und mit dem folgenden Code in meine Aktivitätsklasse (in der Regel aus einer Menü-Option genannt) (die m_contentView Variable ist die Ansicht von findViewById() unter Verwendung der ID, die Sie beim setContentView() in der beim Aufruf erstellen)

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

ich verwende diese Technik in alle meine Spiele ohne Problem.

Warum sagen Sie

requestWindowFeature (Window.FEATURE_NO_TITLE); ist natürlich keine Option

?

:: EDIT ::

Nun, wenn Sie dynamisch es versuchen, während der Laufzeit der Aktivität zu zeigen und verstecken Ich bin nicht sicher, wenn Sie, dass mit dem offiziellen Fenstertitel aufgrund der Notiz tun können, die hat Ich habe erwähnt, dass Fensterfunktionen vor dem Aufruf von setContentView() aufgerufen werden müssen (link)

Eine Sache, die Sie tun können, ist Ihre eigene Titelleiste zu implementieren und diese dynamisch zu zeigen und zu verbergen ... Ich habe dieses Beispiel zusammengestellt, das sollte Setzen Sie auf die richtige Spur

Hier ist die Layout-Datei

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

Und hier ist der Code für die Haupttätigkeit, die Sie unsere eigene Titelleiste erlauben wird, ein- und ausschalten

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

Es ist nicht perfekt aussieht, aber man kann immer mit dem Spiel Layout etwas mehr, um das zu tun.

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

Mein anderer Gedanke ist, wenn man nur alles ausblenden möchten ein Fortschrittsbalken zu zeigen, warum nicht die ProgressDialog benutzen?

Diese Klasse ist ziemlich einfach zu bedienen ...

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

Weil ich die App irgendwann vom Vollbildmodus in einen normalen Modus mit Titel wechseln muss. – yanchenko

+0

@snctln: Entschuldigung, ich habe Ihre Beschreibung der Variable 'm_contentView' nicht verstanden. Was ich in meinem Oncreate getan habe, war 'setContentView (R.layout.birdview)'. Was wäre mein 'm_contentView'? Ich habe 'findViewById (R.layout.birdview) .requestLayout()' versucht, aber eine Null-Zeiger-Ausnahme erhalten. –

+0

@Luis A. Florit: Sie sollten suchen nach 'android.R.id.content' - es ist das oberste Elternteil der View-Hierarchie (in Activity erstellt durch Aufruf von' setContentView() 'Methode) –

1

das ist laut der docs und der Android-Entwickler Google Group nicht möglich. Um dies zu implementieren, müssen Sie ein "Titel-Bar-like" Layout-Element mit Ihrem Text und Fortschrittsbalken hinzufügen und ausblenden/anzeigen, wenn Sie es brauchen. gerade jetzt - anders geht es nicht, da die Titelleistensteuerung nur vor dem setContentView-Aufruf erfolgen kann und danach nicht geändert wird.

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

dies für mich gearbeitet .. bei onResume Methode

+2

wer abgewählt? wenn dieser Code nicht funktioniert, würde ich es hier nie geben ... du könntest es auf eigene Faust versuchen .. arbeitete bei Emulator 1.6 und 2.2 und auf meinem Hero 2.1 – David

11

Um den Titel Ihrer Anwendung zu deaktivieren (es ist der App-Name)

requestWindowFeature(Window.FEATURE_NO_TITLE) 

die Benachrichtigungsleiste deaktivieren auf die obere (so eine Anfrage an den Android-App-Manager, um Vollbild zu ermöglichen)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

Hoffe das hilft jedem, der den Unterschied wissen will !!

13

Das Hinzufügen von android:theme="@android:style/Theme.NoTitleBar.Fullscreen" zum Anwendungs-Tag in der Manifest-Datei macht jede Aktivität im Vollbildmodus.

+1

Beachten Sie, dass dies auch in einem Manifest-Tag einer einzelnen Aktivität funktioniert. – kungphu

3

Auf Android 3+ kann es easilyy durch getActionBar().hide() Aufruf erreicht werden und getActionBar().show() um jeweils ein- und ausblenden den Standard ActionBar

Auf Android 1,2 die beste Lösung (I guess) ist benutzerdefinierte Ansicht für yout zu implementieren " Titelleiste "und verstecken Sie es bei Bedarf (natürlich, am Anfang zu requestWindowFeature(Window.FEATURE_NO_TITLE); aufrufen).

+0

Die 'getActionBar(). Hide()' funktionierte perfekt. – sparticvs

Verwandte Themen