2009-06-13 23 views
25

Czy istnieje sposób, aby ukryć tytuł okna tak, że nie zostanie pokazany w trybie pełnoekranowym (Ukrywanie tytułu w trybie pełnoekranowym?

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

), ale potem pojawia się na

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN) 

?

requestWindowFeature(Window.FEATURE_NO_TITLE) 

to oczywiście nie jest opcja, ponieważ nie pozwoli jej to odzyskać.

+0

Czy chcesz mieć możliwość włączania i wyłączania? –

+0

Tak. Aby być bardziej precyzyjnym, chcę pokazać pasek postępu, ale jest to związane z tytułem. – yanchenko

Odpowiedz

57

Sposób obsłużyć to w moim Android gier jest wywołanie następującą linię w onCreate() mojej działalności

requestWindowFeature(Window.FEATURE_NO_TITLE); 

mogę włącz możliwość pełnego ekranu i wyłączać za pomocą następującego kodu w moja klasa aktywności (zazwyczaj nazywany z opcji menu) (zmienna m_contentView jest widok z findViewById() przy użyciu identyfikatora, który został użyty podczas wywoływania setContentView() w Create)

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

używam tej techniki w wszystkie moje gry bez problemu.

Dlaczego mówisz

requestWindowFeature (Window.FEATURE_NO_TITLE); nie jest oczywiście oczywiście

?

:: EDIT ::

Dobrze, jeśli starają się dynamicznie pokazać i ukryć go w trakcie trwania aktywności Nie jestem pewien, czy można to zrobić z oficjalnym Window Title z powodu listu, który ma wspomniano o funkcjach okna, które należy ustawić przed wywołaniem funkcji setContentView() (link)

Jedną rzeczą, którą można zrobić, jest zaimplementowanie własnego paska tytułu i dynamiczne pokazywanie i ukrywanie tego ... Połączyłem ten przykład, który powinien ustaw prawidłowy utwór

Oto plik układu

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

A oto kod głównej działalności, która pozwoli na przełączanie nasz własny pasek tytułowy i wyłączanie

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

To nie wygląda idealny, ale zawsze można grać z układ trochę więcej, aby to zrobić.

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

Moja druga myśl jest, jeśli po prostu chcesz ukryć wszystko, aby pokazać pasek postępu, dlaczego nie użyć ProgressDialog?

Ta klasa jest dość łatwa w użyciu ...

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

Ponieważ w pewnym momencie muszę zmienić aplikację z trybu pełnoekranowego na tryb "normalny" z tytułem. – yanchenko

+0

@ snctln: Niestety, nie rozumiem twojego opisu zmiennej 'm_contentView'. To, co zrobiłem w moim oncreate, to 'setContentView (R.layout.birdview)'. Jaki byłby mój "m_contentView"? Próbowałem 'findViewById (R.layout.birdview) .requestLayout()', ale otrzymałem wyjątek wskaźnika pustego. –

+0

@Luis A. Florit: Powinieneś wyszukać 'android.R.id.content' - jest to najwyższy rodzic hierarchii widoku (utworzony w Activity przez wywołanie metody' setContentView() ') –

1

który nie jest możliwy zgodnie z dokumentami i grupą Google dla programistów Androida. Aby to zaimplementować, musisz dodać element układu "pasek tytułu" z tekstem i paskiem postępu oraz ukryć/pokazać, gdy jest to potrzebne. teraz - w żaden inny sposób, ponieważ kontrola paska tytułu może być wykonana tylko przed wywołaniem setContentView i nie może zostać zmieniona później.

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

ten pracował dla mnie .. na metodzie onResume

+2

, który przegłosował? jeśli ten kod nie zadziała, nigdy bym go tutaj nie dał ... mógłbyś spróbować sam ... pracował na emulatorze 1.6 i 2.2 i na moim Hero 2.1 – David

11

Aby wyłączyć tytuł aplikacji (jest to nazwa aplikacji)

requestWindowFeature(Window.FEATURE_NO_TITLE) 

Aby wyłączyć pasek powiadomień na top (czyli prośba do menedżera aplikacji na Androida, aby zezwolić na pełny ekran)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

Mam nadzieję, że pomoże to każdemu, kto chce poznać różnicę !!

13

Dodanie android:theme="@android:style/Theme.NoTitleBar.Fullscreen" do znacznika aplikacji w pliku manifestu spowoduje, że każda aktywność zostanie wyświetlona na pełnym ekranie.

+1

Pamiętaj, że działa to również w tagu manifestu pojedynczej aktywności. – kungphu

3

Na Androidzie 3+ można easilyy osiągnięte poprzez wywołanie getActionBar().hide() i getActionBar().show() odpowiednio pokazać i ukryć standardowego ActionBar

Na Androidzie 1,2 najlepszym rozwiązaniem (chyba) jest wdrożenie niestandardowych widok dla yout " pasek tytułowy "i ukryj go na żądanie (oczywiście dzwoniąc pod numer requestWindowFeature(Window.FEATURE_NO_TITLE);).

+0

Funkcja 'getActionBar(). Hide()' działała idealnie. – sparticvs

Powiązane problemy