android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 适用于应用程序级别,但不适用于活动级别。有啥线索吗?

Posted

技术标签:

【中文标题】android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 适用于应用程序级别,但不适用于活动级别。有啥线索吗?【英文标题】:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" works on Application level but not at the activity level. Any clue?android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 适用于应用程序级别,但不适用于活动级别。有什么线索吗? 【发布时间】:2012-04-22 14:28:20 【问题描述】:

我需要将我的一个名为 MyNoStatusBarActivity.java 的活动设为全屏活动。

我已在 Manifest 中添加:

<activity
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    android:name=".MyNoStatusBarActivity"
    android:noHistory="true"
    android:label="@string/app_name"
    android:configChanges="touchscreen|keyboard|keyboardHidden|navigation|orientation">
    ...
</activity>

在我的活动onCreate 中:

@Override
public void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

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

这样做只是隐藏了标题栏而不是状态栏。

此外,如果我在应用程序级别使用清单主题而不是我的活动,它可以工作,但适用于我的应用程序的所有活动,这不是我想要的。我只想要一个特定活动的无状态栏。

我们将不胜感激。谢谢!

P.S:我很好,这种行为在 Honeycomb/ICS 中不再可用。我只需要这个 2.2 和 2.3

编辑

尝试了 SO 中其他解决方案中提到的所有建议,但尚未成功。主题在应用于应用程序级别但不适用于活动级别时有效。

我正在使用 HTC WildFire-S,android 版本 2.3.5

【问题讨论】:

【参考方案1】:

在您的清单 xml 中,在应用程序级别放置:

<application
    ...
    android:theme="@android:style/Theme.NoTitleBar" >
</application>

在你想要全屏显示的活动中放这个:

<activity

     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
     ...
</activity>

移除 onCreate 中的所有 setWindowsFeature 或 setFlag 方法。

【讨论】:

我相信是的。我曾经在 android 2.2 上测试过这个【参考方案2】:

我认为您只需将android:theme="@android:style/Theme.NoTitleBar.Fullscreen 排除在mainfest 之外,坚持仅使用代码调用,它总是对我有用。您使用的是哪种测试设备?

还要确保这些电话在您像这样拨打setContentView(R.layout.xxx)之前发出

    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.xxx);

检查所有代码中的android:theme 声明,即清单和单独的布局xml 文件。听起来好像在应用程序级别声明它是有效的(因为它会覆盖任何后续主题声明)但是有些东西会覆盖您的活动级别请求。

尝试在您的整个项目中搜索“android:theme”并删除您不是 100% 确定需要的任何内容,以这种方式进行测试

【讨论】:

不起作用。只有标题熄灭,但状态栏仍然存在。我正在使用 HTC WildFire-S,android 版本 2.3.5 事实上,活动的顶部似乎在状态栏下方。状态栏似乎有某种高 z-index 并隐藏了我的全屏活动的一部分! 您确定您的项目中没有其他xml主题声明吗? 您是否也检查了各个布局文件? (位于 res/layout 中的那些)【参考方案3】:

我把它放在我的活动中:

requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);

在我的清单中我没有修改,这是我的,没有修改:

android:theme="@style/AppTheme"

在我的活动 xml 中:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

【讨论】:

【参考方案4】:

这样就可以了:

protected void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

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

    setContentView(R.layout.activity_main);

【讨论】:

【参考方案5】:

这将解决您的问题

只需在你的清单中更改 @android:style... 为 @style/..

<application
    ...
    android:theme="@style/Theme.AppCompat.NoActionBar">
    ...
</application>

【讨论】:

以上是关于android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 适用于应用程序级别,但不适用于活动级别。有啥线索吗?的主要内容,如果未能解决你的问题,请参考以下文章

android :framework层自定义theme无法取得

Android Theme主题继承(SDK下主题和v7包下主题)

Android - 错误:&quot;No resource found that matches the given name android:Theme.Material&quot

android 如何将activity设置成窗口样式

Android去掉标题依然显示

android numberpicker控件的布局问题