在全屏模式下隐藏标题?
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