2009-06-13 2 views
25

Есть ли способ, чтобы скрыть заголовок окна, так что он не будет показан в полноэкранном режиме (Скрытие заголовка в полноэкранном режиме?

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

), но затем появится на

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN) 

?

requestWindowFeature(Window.FEATURE_NO_TITLE) 

не является вариантом, так как это не позволит вернуть его.

+0

Итак, вы хотите иметь возможность включать и выключать его по желанию? –

+0

Да. Чтобы быть более точным, я хочу показать прогрессбар, но это связано с названием. – yanchenko

ответ

57

Как мне справиться с этим в моих Android игр назвать следующую строку в OnCreate() моей деятельности

requestWindowFeature(Window.FEATURE_NO_TITLE); 

Затем я могу превратить все возможности экрана и выключения, используя следующий код мой класс активности (обычно вызывается из пункта меню) (переменная m_contentView является видом из findViewById(), используя идентификатор, который вы использовали при вызове setContentView() в при создании)

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

Я использую эту технику в все мои игры без проблем.

Почему вы говорите

requestWindowFeature (Window.FEATURE_NO_TITLE); не является, конечно,

?

:: EDIT ::

Ну, если вы пытаетесь динамически отображать и скрывать его в течение всего срока деятельности я не уверен, если вы можете сделать это с официальным заголовком окна из-за записки, которая имеет были упомянуты о свойствах окна, которые необходимо установить перед вызовом setContentView() (link)

Одна вещь, которую вы можете сделать, это реализовать свою собственную панель заголовка и динамически показать и скрыть это ... Я собрал этот пример, который должен установите нужный трек

Вот файл макета

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

А вот код для основной деятельности, что позволит вам переключать наш пользовательский заголовок окна и выключаться

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

Это не выглядит идеально, но вы всегда можете играть с макет еще немного для этого.

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

Моя другая мысль, если вы просто хотите, чтобы скрыть все, чтобы показать прогресс бар почему бы не использовать ProgressDialog?

Этот класс довольно прост в использовании ...

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

Потому что мне нужно переключить приложение из полноэкранного режима в «нормальный» режим с заголовком в какой-то момент. – yanchenko

+0

@snctln: Извините, я не понял вашего описания переменной 'm_contentView'. То, что я сделал в моем oncreate, было 'setContentView (R.layout.birdview)'. Какой будет мой 'm_contentView'? Я попробовал 'findViewById (R.layout.birdview) .requestLayout()', но получил исключение нулевого указателя. –

+0

@ Luis A. Florit: вам следует искать 'android.R.id.content' - это самый верхний родительский элемент иерархии представлений (созданный в Activity путем вызова метода' setContentView() ') –

1

Это невозможно в соответствии с документами и группой разработчиков google-разработчиков. чтобы реализовать это, вам нужно добавить элемент макета в виде заголовка с текстом и индикатором выполнения и скрыть/показать, когда вам это нужно. прямо сейчас - нет другого способа обойти это, так как управление полосой заголовка может быть выполнено только до вызова setContentView и не изменено после.

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

это работает для меня .. по методу onResume

+2

, который проголосовал? если этот код не работает, я бы никогда не дал его здесь ... вы могли бы попробовать самостоятельно .. работали в эмуляторах 1.6 и 2.2 и на моем Hero 2.1 – David

11

Чтобы отключить заголовок приложения (это имя приложения)

requestWindowFeature(Window.FEATURE_NO_TITLE) 

Чтобы отключить панель уведомлений о верхний (так что запрос администратора приложения Android для полноэкранного режима)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

Надеюсь, это поможет любому, кто хочет узнать разницу!

13

Добавление android:theme="@android:style/Theme.NoTitleBar.Fullscreen" к тегу приложения в файле манифеста сделает все действия в полноэкранном режиме.

+1

Обратите внимание, что это также работает в теге манифеста индивидуального действия. – kungphu

3

На Android 3+ может быть easilyy достигается путем вызова getActionBar().hide() и getActionBar().show() соответственно для отображения и скрытия стандартного ActionBar

На Android 1,2 лучшее решение (я предполагаю), чтобы реализовать пользовательский вид для Yout, " title bar "и спрячьте его по требованию (конечно, вызывая requestWindowFeature(Window.FEATURE_NO_TITLE); в начале).

+0

'getActionBar(). Hide()' работал отлично. – sparticvs

Смежные вопросы