Скрытие заголовка в полноэкранном режиме? - PullRequest
25 голосов
/ 14 июня 2009

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

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

) но потом появится на

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN)

requestWindowFeature(Window.FEATURE_NO_TITLE)

конечно не вариант, так как это не позволит вернуть его обратно.

Ответы [ 6 ]

57 голосов
/ 14 июня 2009

То, как я справляюсь с этим в моих играх для 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 () вызывается ( ссылка )

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

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

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

Моя другая мысль: если вы просто хотите скрыть все, чтобы отобразить индикатор выполнения, почему бы не использовать 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();
}
13 голосов
/ 25 января 2012

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

11 голосов
/ 29 сентября 2011

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

requestWindowFeature(Window.FEATURE_NO_TITLE)

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

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

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

10 голосов
/ 01 мая 2011
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

3 голосов
/ 29 апреля 2013

В Android 3+ этого легко добиться, вызвав getActionBar().hide() и getActionBar().show(), чтобы соответственно отобразить и скрыть стандартную панель действий

.

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

1 голос
/ 14 июня 2009

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

...