【问题标题】: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

【问题讨论】:

    标签: android android-activity android-manifest statusbar android-theme


    【解决方案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>
        

        【讨论】:

          猜你喜欢
          • 2018-09-06
          • 2023-03-13
          • 2016-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-04
          • 1970-01-01
          相关资源
          最近更新 更多