代码之家  ›  专栏  ›  技术社区  ›  yanchenko

在全屏模式下隐藏标题?

  •  25
  • yanchenko  · 技术社区  · 15 年前

    有没有方法隐藏窗口标题,这样它就不会在全屏模式下显示?(

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

    )但之后会出现

    getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN)
    

    ?

    requestWindowFeature(Window.FEATURE_NO_TITLE)
    

    当然不是一个选择,因为这不允许它回来。

    6 回复  |  直到 6 年前
        1
  •  57
  •   Michał Å rajer    12 年前

    在我的Android游戏中,我处理这个问题的方法是在我的活动的onCreate()中调用以下行

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    

    然后,我可以使用Activity类中的以下代码(通常从菜单选项调用)关闭和打开全屏功能(m_contentView变量是findView byid()中的视图,使用在on create中调用setContentView()时使用的ID)。

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

    我在所有的游戏中都使用了这种技巧。

    你为什么这么说

    请求窗口功能(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_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();
    }
    
        2
  •  13
  •   user1154664    12 年前

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

        3
  •  11
  •   Maykel Llanes Garcia    6 年前

    禁用应用程序标题 (这是应用程序名)

    requestWindowFeature(Window.FEATURE_NO_TITLE)
    

    禁用顶部的通知栏 (向Android应用程序管理器请求允许全屏显示)

    getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

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

        4
  •  10
  •   mu is too short    13 年前
    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);  
    }  
    

    这对我有用……At OnResume方法

        5
  •  3
  •   Alex Semeniuk    11 年前

    在android 3+上,通过调用 getActionBar().hide() getActionBar().show() 分别显示和隐藏标准操作栏

    在android 1,2上,最好的解决方案(我猜)是为你的“标题栏”实现自定义视图并根据需要隐藏它(当然,调用 requestWindowFeature(Window.FEATURE_NO_TITLE); 一开始)。

        6
  •  1
  •   reflog    15 年前

    根据Docs和Android开发者Google Group的说法,这是不可能的。要实现这一点,您需要在文本和进度条中添加一个类似标题栏的布局项,并在需要时隐藏/显示。现在-没有其他方法可以解决这个问题,因为标题栏控件只能在setContentView调用之前完成,而不能在之后更改。