在全屏模式下隐藏标题?

Posted

技术标签:

【中文标题】在全屏模式下隐藏标题?【英文标题】:Hiding Title in a Fullscreen mode? 【发布时间】:2010-11-02 18:26:44 【问题描述】:

有没有办法隐藏窗口标题,使其不会在全屏模式下显示(

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

) 但随后会出现在

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN)

?

requestWindowFeature(Window.FEATURE_NO_TITLE)

当然不是一种选择,因为这不允许将其取回。

【问题讨论】:

所以您希望能够随意打开和关闭它? 是的。更准确地说,我想显示一个进度条,但它与标题相结合。 【参考方案1】:

我在我的 android 游戏中处理这个问题的方式是在我的 Activity 的 onCreate() 中调用以下行

requestWindowFeature(Window.FEATURE_NO_TITLE);

然后我可以在我的活动类(通常从菜单选项中调用)中使用以下代码关闭和打开全屏功能(m_contentView 变量是使用调用 setContentView 时使用的 id 来自 findViewById() 的视图() 在您的创建中)

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() (link)

您可以做的一件事是实现您自己的标题栏并动态显示和隐藏它...我将这个示例放在一起应该让您走上正轨

这是布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_ 
    android:layout_
    android:orientation="vertical"
    android:fadingEdgeLength="0sp"
    >

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/myTitleBarLayout" 
        android:layout_ 
        android:layout_
        android:orientation="vertical"
        >

        <TextView
            android:id="@+id/myTitleBarTextView"
            android:layout_ 
            android:layout_
            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_
            android:layout_
            android:background="#CCEEEEEE"
            android:padding="10dip"
        />
    </LinearLayout>

    <ScrollView  xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_ 
        android:layout_
        android:layout_weight="1"
        >

        <!-- Insert your regular layout stuff here -->

        <Button android:id="@+id/toggle_title_button" 
            android:layout_ 
            android:layout_
            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);
                    
                
            );
    

它看起来并不完美,但您总是可以多玩一些布局来做到这一点。

我的另一个想法是,如果您只想隐藏所有内容以显示进度条,为什么不使用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();

【讨论】:

因为我需要在某个时候将应用程序从全屏切换到带有标题的“正常”模式。 @snctln:对不起,我不明白你对m_contentView 变量的描述。我在 oncreate 中所做的是setContentView(R.layout.birdview)。哪个是我的m_contentView?我试过findViewById(R.layout.birdview).requestLayout(),但得到一个空指针异常。 @Luis A. Florit :您应该搜索 android.R.id.content - 它是视图层次结构的最顶层父级(通过调用 setContentView() 方法在 Activity 中创建)【参考方案2】:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 添加到清单文件中的应用程序标记将使每个活动全屏。

【讨论】:

请注意,这也适用于单个活动的清单标签。【参考方案3】:

禁用应用程序的标题(它是应用程序名称)

requestWindowFeature(Window.FEATURE_NO_TITLE)

禁用顶部的通知栏(因此向 android 应用管理器请求允许全屏)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

希望这可以帮助任何想知道区别的人!

【讨论】:

【参考方案4】:
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 方法

【讨论】:

谁投了反对票?如果这段代码不起作用,我永远不会在这里给出它......你可以自己尝试......在模拟器 1.6 和 2.2 以及我的 Hero 2.1 上工作【参考方案5】:

在 Android 3+ 上可以通过调用getActionBar().hide()getActionBar().show() 分别显示和隐藏标准的ActionBar 轻松实现

在 Android 1,2 上,最好的解决方案(我猜)是为你的“标题栏”实现自定义 View 并按需隐藏它(当然,在开头调用 requestWindowFeature(Window.FEATURE_NO_TITLE);)。

【讨论】:

【参考方案6】:

根据文档和 android-developers google 组,这是不可能的。要实现这一点,您需要添加一个带有文本和进度条的“类似标题栏”的布局项,并在需要时隐藏/显示。现在 - 没有其他办法,因为标题栏控制只能在 setContentView 调用之前完成,之后不能更改。

【讨论】:

以上是关于在全屏模式下隐藏标题?的主要内容,如果未能解决你的问题,请参考以下文章

在全屏模式下收听状态栏/导航栏可见性?

在全屏模式下显示状态栏 Ionic for android 和 iOS

隐藏在模态视图中的状态栏(在全屏演示中)

MPMoviePlayerController 在全屏模式下停止工作 // 纵向 // iOS 7

在全屏模式下添加 MPMoviePlayerController?

Pygame 窗口在全屏模式下没有响应