Скрытие заголовка в полноэкранном режиме?
Есть ли способ скрыть заголовок окна, чтобы он не отображался в полноэкранном режиме (
getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN,
LayoutParams.FLAG_FULLSCREEN)
) но потом появится на
getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN)
?
requestWindowFeature(Window.FEATURE_NO_TITLE)
это не вариант, конечно, так как это не позволит получить его обратно.
6 ответов
То, как я справляюсь с этим в моих играх для 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); это не вариант, конечно
?
::РЕДАКТИРОВАТЬ::
Хорошо, если вы пытаетесь динамически отображать и скрывать его во время действия, я не уверен, что вы можете сделать это с официальным заголовком окна из-за примечания, которое было упомянуто об элементах окна, которые необходимо установить перед 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);
}
}
});
}
}
Это не выглядит идеально, но вы всегда можете поиграть с макетом, чтобы сделать это.
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();
}
Добавление android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Чтобы тег приложения в файле манифеста сделает каждое действие полноэкранным.
Чтобы отключить заголовок вашего приложения (это имя приложения)
requestWindowFeature(Window.FEATURE_NO_TITLE)
Чтобы отключить панель уведомлений вверху (так что запрос к менеджеру приложений Android, чтобы разрешить полноэкранный режим)
getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)
Надеюсь, это поможет любому, кто хочет узнать разницу!
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
На Android 3+ это можно легко сделать, позвонив getActionBar().hide()
а также getActionBar().show()
соответственно показать и скрыть стандартный ActionBar
На Android 1,2 лучшее решение (я полагаю) состоит в том, чтобы реализовать собственный вид для вашей "строки заголовка" и скрыть его по требованию (разумеется, вызывая requestWindowFeature(Window.FEATURE_NO_TITLE);
в начале).
Это невозможно в соответствии с документацией и группой Google android-разработчиков. Чтобы реализовать это, вам нужно добавить элемент макета в стиле заголовка с текстом и индикатором выполнения и скрыть / показать, когда вам это нужно. прямо сейчас - другого пути нет, так как контроль над строкой заголовка может быть выполнен только до вызова setContentView и не изменен после него.