Como ocultar a barra de título para uma Atividade em XML com tema personalizado existente

876

Quero ocultar a barra de título para algumas das minhas atividades. O problema é que apliquei um estilo a todas as minhas atividades, portanto, não posso simplesmente definir o tema @android:style/Theme.NoTitleBar.

Usar o tema NoTitleBar como pai do meu estilo removeria a barra de título de todas as minhas atividades.

Posso definir um item de estilo sem título em algum lugar?

Janusz
fonte

Respostas:

1065

Faça isso no seu onCreate()método.

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Remove notification bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

//set content view AFTER ABOVE sequence (to avoid crash)
this.setContentView(R.layout.your_layout_name_here); 

thisrefere-se a Activity.

Guinada
fonte
7
Ótima resposta. Você não precisa fazer as duas coisas, remover a barra de notificação pode ser um exagero.
Jim Blackler
209
Lembre-se de colocá-lo antes da chamada para setContentView (R.id.x), caso contrário, ele travará. O motivo não foi imediatamente óbvio para mim. 08-13 12: 47: 33.561 E / AndroidRuntime (9125): java.lang.RuntimeException: Não foi possível iniciar a atividade ComponentInfo {com.myapp / com.myapp.SplashActivity}: android.util.AndroidRuntimeException: requestFeature () deve ser chamado antes de adicionar conteúdo
mobibob 13/08/10
9
Você realmente deve mencionar que ao usar requestWindowFeature (), um fechamento forçado ocorrerá se você executar esta linha após adicionar qualquer conteúdo. E em uma nota lateral, o método XML é muito mais seguro e também separa a estrutura da página do seu código, (que é o todo propósito dos XMLs em primeiro lugar.)
b1nary.atr0phy
21
Isso não funciona usando a API 22. Ainda vejo a barra de título inicialmente quando o aplicativo é inicializado.
User2966445
7
ele funciona se sua atividade se estende atividade não AppCompatActivity ou seja, a classe deve ser declarado como public class myActi estende Atividade {}
Manpreet Singh Dhillon
523

Você pode modificar o seu AndroidManifest.xml:

<activity android:name=".MainActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">

ou use android:theme="@android:style/Theme.Black.NoTitleBar"se você não precisar de uma atividade em tela cheia.

Nota: Se você já usou uma visualização 'padrão' antes, provavelmente também deve alterar a classe pai de AppCompatActivitypara Activity.

Redax
fonte
1
Não sei porque. Eu usei apenas o projeto padrão e adicionei uma atividade. O preenchimento automático não funciona, mas o tema está lá.
Redax
82
android:theme="@android:style/Theme.Black.NoTitleBar"é provavelmente mais útil a menos que você está fazendo um jogo
Chris S
7
Ou <style name = "AppTheme" parent = "android: Theme.Light.NoTitleBar" /> para iluminar o tema.
Fernando JS
20
Não sei por que, mas isso está causando um problema no meu aplicativo. Qualquer ajuda?
Akeshwar Jha
12
@ Akhwar: Talvez você precise mexer no seu arquivo styles.xml. Por exemplo, altere <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> para <style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">. Se você fizer isso, não precisará alterar o arquivo AndroidManifest.xml. (Eu estava recebendo o acidente, também, até que eu fiz essa correção.)
Brit Clousing
385

Agora eu fiz o seguinte.

Eu declarei um estilo herdando tudo do meu estilo geral e depois desabilitando o titleBar.

<style name="generalnotitle" parent="general">
    <item name="android:windowNoTitle">true</item>
</style>

Agora eu posso definir esse estilo para todas as Atividades nas quais desejo ocultar a barra de título, substituindo o estilo amplo do aplicativo e herdando todas as outras informações de estilo, sem duplicação no código do estilo.

Para aplicar o estilo a uma Atividade específica, abra AndroidManifest.xmle adicione o seguinte atributo à activitytag;

<activity
    android:theme="@style/generalnotitle">
Janusz
fonte
13
Acredito que ele criou um estilo chamado "geral" e está apenas estendendo-o. Basta removê-lo para seu próprio uso.
Rcl
7
+1 para responder à pergunta, em vez de apenas especificar a maneira mais óbvia de obter resultados semelhantes, como a maioria das outras respostas dessa pergunta. É apenas uma vergonha que tinha de responder à sua própria pergunta para obter uma resposta precisa ...
Jules
1
Esta resposta é a melhor. Mesmo você pode usar qualquer outro tema fornecido pelo Android sem barra de título. Muito obrigado pela partilha
Narendra Pal
4
Eu acredito que essa é uma solução mais elegante que a programática this.requestWindowFeature (Window.FEATURE_NO_TITLE); porque, neste caso, alguns "piscando" do título ainda são visíveis
3/13/13
1
Melhor resposta à pergunta OP :) Mas ainda que não Remve barra de título na minha atividade (API19)
1111161171159459134
166

Não gosto this.requestWindowFeature(Window.FEATURE_NO_TITLE);porque a barra de título aparece brevemente e depois desaparece.

Também não gosto disso, android:theme="@android:style/Theme.NoTitleBar"porque perdi todas as alterações Holo 3.0+ com as quais os usuários dos novos dispositivos se acostumaram. Então me deparei com esta solução.

Na sua pasta res / values, crie um arquivo chamado styles.xml (se ainda não existir). Nesse arquivo, coloque o seguinte código:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style>
</resources>

Em seguida, crie um res / values-v11 com outro arquivo styles.xml (mais uma vez, isso já pode existir). Nesse arquivo, coloque o seguinte código:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style>
</resources>

E se você estiver direcionando para a versão 4.0+, crie uma pasta res / values-v14 com mais um arquivo styles.xml (sim, ela já pode estar lá). Nesse arquivo, coloque o seguinte código:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style>
</resources>

Por fim, com todos esses arquivos criados, abra o arquivo AndroidManifiest.xml e adicione o código:

android:theme="@style/Theme.NoTitle"

para a tag de atividade da atividade para a qual você não deseja título ou a tag do aplicativo, se desejar que ele se aplique a todo o aplicativo.

Agora, os usuários obterão os temas associados à versão do dispositivo com o layout de tela desejado.

PS Alterar o valor para android:theme="@style/Theme.FullScreen"terá o mesmo efeito, mas também removerá a barra de notificação.

Devin Stewart
fonte
Eles ... isso funciona bem para o que você disse, mas as imagens gritaram ao mudar os temas. Então o que fazer ???
Arun
1
@arun - Não tive nenhum problema de imagem usando esse método. O que você quer dizer com gritou?
Devin Stewart
1
Melhor resposta .. this.requestWindowFeature (Window.FEATURE_NO_TITLE); não é adequado e <item name = "android: windowNoTitle"> true </item> perdeu o tema original .. Obrigado @DevinStewart ..aceite +1 pela sua explicação :)
lynndragon
5
Ah, bobo eu! Eu estava usando o ActionBarActivity, o que não faz sentido se você deseja REMOVER A BARRA DE ACÇÃO! Mudar para uma atividade simples ou FragmentActivity permite que essa boa solução funcione como um encanto.
Scott Biggs
1
"Infelizmente, o YourApp parou."
22617 Chris Allinson
104

A barra de título pode ser removida de duas maneiras, conforme mencionado na página do desenvolvedor do Android:

No manifest.xmlarquivo:

  1. Adicione o seguinte em applicationse você deseja removê-lo para todas as atividades em um aplicativo:

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
  2. Ou para uma atividade específica:

    <activity android:theme="@android:style/Theme.Black.NoTitleBar">
sombra branca
fonte
15
É melhor usar android: theme = "@ android: style / Theme.DeviceDefault.NoActionBar.Fullscreen" em vez de black.theme. Deixe o dispositivo lidar com o tema. mas graças, eu usei sua abordagem
Varand Pezeshkian
54

a resposta correta provavelmente é não estender o ActionbarActivity, e sim estender apenas Activity


se você ainda usa a atividade da barra de ação, parece que está funcionando:

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

parece que isso funciona também:

styles.xml:

   <style name="AppBaseTheme" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

eu poderia fazer como Scott Biggs escreveu. esse tipo de obras. exceto que não há tema então. quero dizer, o fundo do menu de configurações é transparente:

Apenas mude

public class MainActivity extends ActionBarActivity {

para Atividade ou FragmentActivity

public class MainActivity extends Activity  {

no entanto, eu poderia torná-la boa o suficiente usando o design do material e não remover a barra de ação: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. definir ícone do aplicativo
  2. defina as cores da barra de ação para combinar com o design.
  3. definir ícone para o menu de configurações
  4. adicione mais ícones (botões na parte superior)

é por exemplo do estilo da barra de ação de compatibilidade de design de material.

Shimon Doodkin
fonte
4
Alterar a ActionBarActivity para Activity fez o truque para mim!
DritanX
44

o que funciona para mim:

1- no styles.xml:

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

2- na MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
  1. em manifesto herdar o estilo:

    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">
Flowra
fonte
Como descrito acima, às vezes não funciona no xml. Eu não sei por que exatamente, eu não estou completamente certo, mas getSupportActionBar().hide();dentro onCreate () {} irá fazer o trabalho
ZeePee
43

Se você usar o this.requestWindowFeature(Window.FEATURE_NO_TITLE)usuário, ainda poderá ver a barra de título por um momento durante o início da animação, quando a atividade começar onCreate. Se você usar @android:style/Theme.Black.NoTitleBarcomo mostrado abaixo, a barra de título não será exibida durante a animação de inicialização.

<activity 
    android:name=".MainActivity" 
    android:label="My App"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait">

O exemplo acima obviamente substituirá o tema do aplicativo existente, se você tiver um tema existente, adicione <item name="android:windowNoTitle">true</item>-o.

raj c
fonte
Minha atividade é de instância única com @android: style / Theme.Black.NoTitleBar, mas o uso desse código funcionará quando a atividade for criada pela primeira vez como você conheceu a atividade SingleInstance e, em seguida, novamente não criada, portanto, use o método OnNewItent, mas agora meu problema é quando a atividade é exibida é só Mostrar Barra de status para 4 Second .Como eu posso sair de this.Here é a minha pergunta da ligação é stackoverflow.com/questions/9308767/...
Herry
29

Quando tentei usar todas essas respostas com alta pontuação, meu aplicativo sempre falhava. (acho que tem algo a ver com o "@android: style"?)

A melhor solução para mim foi usar o seguinte:

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

Não há mais barra de cabeçalho / título. Basta colocá-lo no <application>...</application>ou <activity>...</activity>dependendo se você (não) o desejar em todo o aplicativo ou apenas em uma atividade específica.

TryToSolveItSimple
fonte
Esta é a melhor maneira (ou a única maneira?) Se o aplicativo "estender AppCompatActivity"!
Ferrarezi
17

Crie um tema como abaixo.

 <!-- Variation on the Light theme that turns off the title -->
<style name="MyTheme" parent="android:style/Theme.Black">
    <item name="android:windowNoTitle">true</item>
</style>
arenoso
fonte
16

Adicionar

<item name="android:windowNoTitle">true</item>

dentro do AppTheme (styles.xml)

nijas
fonte
15

Basta usar getActionBar().hide();no seu onCreate()método de atividade principal .

Anas Al Hamdan
fonte
14

Você só precisa alterar o AppThemeestilo no Style.xml se substituir a definição deDarkActionBar

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

para NoActionBar

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

o AppTheme definido no AndroidManifast.xml

Daniel Levi
fonte
14

Pois AppCompat, a seguinte solução funcionou para mim:

Adicione um novo estilo de tema sem barra de ação styles.xmle defina parent="Theme.AppCompat.NoActionBar".

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/colorPrimary</item>

</style>


Agora implemente o mesmo estilo de tema na atividade da tela inicial em androidManifest.xml

<activity
        android:name=".ActivityName"
        android:theme="@style/SplashTheme"> // apply splash them here 

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

Aqui está o resultado:

insira a descrição da imagem aqui

Krunal
fonte
11

Você pode usar esse código no seu arquivo java

adicione esta linha antes de definir ou carregar sua visualização

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);
Aneh Thakur
fonte
11

No seu onCreatemétodo, use o seguinte snippet:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Mahesh
fonte
o aplicativo começa com o título e as Ele oculta, que mostram mostrar o aplicativo sem título
Bachask8
10

Adicione os dois ao tema que você usa:

    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
desenvolvedor android
fonte
"Infelizmente, o YourApp parou."
22617 Chris Allinson
<item name="windowActionBar">false</item>causa falha no aplicativo. pode ser é isso que @ChrisAllinson significava
Mubashar
Não foi possível confirmar. Funciona bem para mim.
desenvolvedor android
10

Adicione esse estilo ao seu arquivo style.xml

 <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>

Depois disso, faça referência a esse nome de estilo no seu androidManifest.xml na atividade perticular na qual você não deseja ver a barra de título, como abaixo.

<activity android:name=".youractivityname"
     android:theme="@style/AppTheme.NoActionBar">
</activity>
Ninguém
fonte
você esqueceu o android:prefixo antes os nomes em seu primeiro bloco de código :)
Stam Kaly
8

Estou usando uma barra de ferramentas do widget de suporte v7. Portanto, para poder excluir ou ocultar o título, precisamos escrever isso.

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);
MontDeska
fonte
resposta perfeita.
Asesha George
7

Ou se você deseja ocultar / mostrar a barra de título a qualquer momento:

private void toggleFullscreen(boolean fullscreen)
{
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen)
    {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    else
    {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    getWindow().setAttributes(attrs);
}
cprcrack
fonte
6

No meu caso, se você estiver usando o android studio 2.1 e sua versão do SDK de compilação for 6.0, basta ir ao seu arquivo manifest.xml e alterar o seguinte código:

Aqui está o código:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lesterxu.testapp2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

E aqui está o snip shoot (veja o código de destaque): insira a descrição da imagem aqui

Lester
fonte
Bem-vindo ao SO. Poste seu código diretamente no SO, em vez de postar uma imagem do seu código.
Richard Erickson
6

Isso resolveu meu problema

Manifestar minha atividade:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Com estilo no nome "AppTheme":

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme"
        parent="Theme.AppCompat.Light.NoActionBar">
        **<item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>**
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>
Sam
fonte
6

Para ocultar a barra de título e ação, fiz o seguinte:

Na tag de atividade do manifesto:

android:theme="@style/AppTheme.NoActionBar"

Em Activity.java antes de setContentView:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

ou seja,

// Remover barra de título

this.requestWindowFeature (Window.FEATURE_NO_TITLE);

// Remover barra de notificação

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

NOTA : Você precisa manter essas linhas antes desetContentView

Shylendra Madda
fonte
Eu não sou tão experiente em Java ou na criação de aplicativos Android; portanto, seu comentário de que essas linhas de código devem estar localizadas antes de setContentView é o que realmente ajudou! Obrigado!
Kyle van Til
5

A primeira resposta é anfibólio. aqui está a minha explicação: add:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

no método oncreate ().

antes:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);

(não apenas antes de setContentView) se não fizer isso, você será fechado. Marque esta resposta com +1.

David
fonte
4

Encontrei duas razões pelas quais esse erro pode ocorrer.

1. Os sinalizadores da janela já estão definidos, super.onCreate(savedInstanceState);nesse caso, você pode querer usar a seguinte ordem de comandos:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

super.onCreate(savedInstanceState);

Dois. Você tem o botão Back / Up dentro da TitleBar, o que significa que a atividade atual é um filho hierárquico de outra atividade. Nesse caso, convém comentar ou remover essa linha de código de dentro do onCreatemétodo.

getActionBar().setDisplayHomeAsUpEnabled(true);
Dzhuneyt
fonte
Obrigado, ele me ajudou a definir NoTitle e FullScreen sem alterações tema
Mohsen Afshin
4

É assim que o código completo se parece. Observe a importação do android.view.Window.

package com.hoshan.tarik.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
    }
}
Tarik
fonte
4

Adicione theme @ style / Theme.AppCompat.Light.NoActionBar na sua atividade no AndroidManifest.xml como este

<activity
        android:name=".activities.MainActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>
Samuel Ivan
fonte
3

Se você faz o que os usuários YaW e Doug Paul dizem, é necessário ter em mente que os recursos da janela devem ser definidos antes de chamar setContentView. Caso contrário, você receberá uma exceção.

fergerm
fonte
3

adicione o arquivo mais manifesto,

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

adicione a seguinte linha ao seu arquivo java,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
Kunal Dharaiya
fonte
3

Estou usando o Android Xamarin e isso funcionou para mim.

SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
jase
fonte