Tema de tela cheia para AppCompat


304

Gostaria de saber como posso aplicar o tema de tela cheia (sem barra de título + sem barra de ação) a uma atividade. Estou usando a biblioteca AppCompat do pacote de suporte v7.

Eu tentei aplicar android:theme="@android:style/Theme.NoTitleBar.Fullscreen"a minha atividade específica, mas ela travou. Eu acho que é porque o meu tema de aplicação é assim.

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

Eu também tentei isso

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

que oculta apenas a barra de título, mas não a barra de ação. Minha solução atual é ocultar a barra de ação com

getSupportActionBar().hide();

Respostas:


836

Ao usar o Theme.AppCompat em seu aplicativo, você pode usar o FullScreenTheme adicionando o código abaixo aos estilos.

<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>

e também mencione no seu arquivo de manifesto.

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

67
O estilo pai deve ser "Theme.AppCompat.Light.NoActionBar"
Pairar em Ruan

3
Na verdade, basta adicionar isso ao arquivo xml de estilo: <item name = "android: windowFullscreen"> true </item>. A visibilidade da barra de ação (barra de título) pode ser controlada separadamente usando os métodos .hide / .show em tempo de execução.
Amin

2
FEATURE_NO_TITLE não estava sendo homenageado. Não sei a diferença, mas finalmente mudei minha Activity para estender Activity em vez de AppCompatActivity e meu mesmo código funcionou (felizmente não preciso de 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);
user888867

isso oculta a barra de status também :(
Omama 28/11

3
Eu acrescentaria hideNavigation()em onResume()- sem isso, a barra de navegação ainda era visível em meu aplicativo (API 18+)
Antek

69

Com base na resposta de @nebyan, descobri que a barra de ação ainda não está oculta.

O código a seguir funciona para mim:

<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>

e, claro, não se esqueça de editar seu AndroidManifestarquivo.

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

@ nebyan por que sua solução não funciona, e esta funciona para mim? Qual é a razão?
ahmet

1
Não é necessário definir <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>se o seu tema inclui.NoActionBar
user924

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

Usando o xml acima em style.xml, você poderá ocultar o título e a barra de ação.


12

Surgem problemas entre as versões anteriores e posteriores do Android 4.0 (nível de API 14).

A partir daqui , criei minha própria solução.

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

Eu escrevo esse código no método onResume () porque, se você sair do aplicativo e reabri-lo, a barra de ação permanecerá ativa! (e, portanto, isso resolve o problema)

Espero que tenha sido útil;)


Observe que, se o usuário puxar manualmente a barra de status, ela não se esconderá novamente. Para piorar, se o teclado virtual estiver sendo exibido, a barra de status também será exibida automaticamente e novamente, não será exibida novamente.
Hendra Anggrian


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

Você pode seguir a etapa abaixo: -

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

Espero que ajude..Obrigado !!


4

Deve ser 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>

Somente esta solução oculta a barra de título e a torna completamente em tela cheia. Deve ser marcado como a solução correta. Obrigado!
Darko Maksimovic

3

Para ocultar a barra de status e a barra de ação e tornar sua atividade em tela cheia, use o seguinte código em sua atividade onResume()ou onWindowFocusChanged()método:

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

Você pode encontrar mais informações nos seguintes links:

Nota: Usando as soluções xml fornecidas neste segmento, eu poderia ocultar apenas a barra de status, mas não a barra de navegação.


1
Obrigado, este é o único a ocultar a barra de navegação! Recomendo esta resposta.
Maharkus 25/03


2

Este tema funciona apenas após a API 21 (incluída). E torne transparente o StatusBar e o 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

Para remover a barra de título no AppCompat:

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

1

Você pode tentar o seguinte :

<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
Por favor, também explique o código, se você o fornecer, ele ajudará a entender o seu código e poderá ajudar a obter informações sobre problemas futuros.
Lepidopteron

0

só isso ?

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

0

Simplesmente neste pessoal ao seu estilo:

<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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.