AppCompat的全屏主题


304

我想知道如何将全屏主题(无标题栏+无动作栏)应用于活动。我正在使用支持包v7中的AppCompat库。

我尝试将其应用android:theme="@android:style/Theme.NoTitleBar.Fullscreen"到我的特定活动中,但是崩溃了。我认为这是因为我的应用程序主题是这样的。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

我也尝试过

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

仅隐藏标题栏,不隐藏操作栏。我目前的解决方法是使用隐藏操作栏

getSupportActionBar().hide();

Answers:


836

在应用程序中使用Theme.AppCompat时,可​​以通过将以下代码添加到样式中来使用FullScreenTheme。

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

并在清单文件中提及。

<activity
   android:name=".activities.FullViewActivity"
   android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" 
/>

67
父样式应为“ Theme.AppCompat.Light.NoActionBar”
Hover Ruan

3
实际上,将其添加到样式xml文件中就足够了:<item name =“ android:windowFullscreen”> true </ item>。可以在运行时使用.hide / .show方法单独控制操作栏(标题栏)的可见性。
阿敏

2
FEATURE_NO_TITLE未被兑现。Dunno有所不同,但是我最终将Activity更改为Activity而不是AppCompatActivity,并且我的代码也起作用了(很幸运,我不需要AppCompat):this.requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow()。getDecorView()。setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
user888867 '16

这也会隐藏状态栏:(
Omama

3
我想补充hideNavigation()onResume()-不说,导航栏仍然在我的应用程序(API 18+)可见
ANTEK

69

根据@nebyan的回答,我发现操作栏仍然没有隐藏。

以下代码对我有用:

<style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

并且当然不要忘记编辑您的AndroidManifest文件。

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@nebyan为什么您的解决方案不起作用,而这个对我有用?是什么原因?
ahmet

1
<item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>如果您的主题包括,则无需设置.NoActionBar
user924 '18

19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

使用style.xml中的上述xml,您将能够隐藏标题以及操作栏。


12

在Android 4.0(API级别14)之前和之后的版本之间会出现问题。

这里 我创建了自己的解决方案。

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

我用onResume()方法编写此代码,因为如果您退出应用程序然后重新打开它,操作栏将保持活动状态!(因此可以解决问题)

我希望它会有所帮助;)


请注意,如果用户手动拉动状态栏,它将不会隐藏自己。更糟糕的是,如果显示软键盘,状态栏也会自动显示,并且不会隐藏。
亨德拉·安格里安


7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}

5

您可以按照以下步骤操作:-

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

希望对您有所帮助。谢谢!


4

它应该是parent =“ @ style / Theme.AppCompat.Light.NoActionBar”

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" 
parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

只有此解决方案实际上隐藏标题栏,并使它完全全屏显示。应标记为正确的解决方案。谢谢!
Darko Maksimovic

3

要隐藏状态栏和操作栏并使活动全屏显示,请在活动onResume()onWindowFocusChanged()方法中使用以下代码:

@Override
protected void onResume() {
    super.onResume();
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

您可以在以下链接中找到更多信息:

注意:使用此线程中提供的xml解决方案,我只能隐藏状态栏,而不能隐藏导航栏。


1
谢谢,这是唯一隐藏导航栏的人!强烈推荐这个答案。
Maharkus


2

该主题仅在API 21(包含)之后才有效。并使StatusBar和NavigationBar透明。

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>

1

要在AppCompat中删除标题栏,请执行以下操作:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }

1

您可以尝试以下方法

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>

0
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>


1
也请解释代码,如果您提供的话,它有助于理解您的代码,并可能有助于获取有关未来问题的见解。
鳞翅目

0

只是这个 ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>

0

只是在这些家伙到您的风格:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.