2015-05-17 6 views
41

Ho una semplice app che visualizza il testo.Come mostrare e nascondere ActionBar con AppCompat v.7

L'app inizia con una schermata principale con alcune opzioni (ad esempio un pulsante informazioni che porta a informazioni sull'app, un pulsante Sfoglia che consente all'utente di vedere tutti i singoli pezzi di testo che possono essere visualizzati). Il pulsante principale conduce a un'altra schermata in cui viene visualizzato il testo. Facendo scorrere verso sinistra e destra, può vedere diversi passaggi di testo. Questo è lo scopo principale dell'applicazione.

Attualmente ho implementato un ActionBar. My MainActivity.Java estende AppCompatActivity. Tutto nell'app è in questa attività.

Ora voglio farlo in modo che ActionBar appaia solo in modalità "Display", non in modalità di avvio o "info"/"browse".

È possibile avere un ActionBar in una parte dell'app e no ActionBar in un'altra parte dell'app? (E mantenere tutto nella stessa attività?)

Ho cercato di realizzare questo senza successo. Se è possibile, cosa dovrei provare dopo?

Finora, ho tentato il seguente:

1) Creare questo tema

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

e applicarlo alla MainActivity ...

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.NoActionBar" > 

.... Dopo averlo fatto, ActionBar era ancora lì. (Questo proviene da questo post S.O. (android:windowNoTitle will not hide actionbar with appcompat-v7 21.0.0)

2) Un altro tentativo era di aggiungere questo a onCreate.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
    getActionBar().hide(); 

    setContentView(R.layout.activity_main); 

Questo è venuto dallo studio di questo S.O. post: (How to hide action bar before activity is created, and then show it again?)

Qualche suggerimento?

+1

Hlooooooooow, controllare il tizio risposte. – theapache64

risposta

71

Nelle attività in cui si desidera avere non azione bar utilizzare un tema derivato da Theme.AppCompat.NoActionBar o Theme.AppCompat.Light.NoActionBar. Questa attività non sarà mai in grado di mostrare la barra delle azioni a meno che tu non fornisca la tua tramite setSupportActionBar(Toolbar).

Nelle attività in cui si desidera avere la barra delle azioni utilizzare un tema derivato da Theme.AppCompat, Theme.AppCompat.Light o Theme.AppCompat.Light.DarkActionBar. Questo ti permetterà di nascondere o mostrare dinamicamente la barra delle azioni in tale attività. Non sarai in grado di fornire la tua barra delle azioni utilizzando questi temi.

Quando si lavora con barra delle operazioni appcompat-v7 è necessario ottenere chiamando getSupportActionBar() invece di getActionBar().

+0

grazie per aver detto "caldo" per ottenere la barra – lmiguelvargasf

38

È possibile nascondere e mostrare l'ActionBar in modo programmatico.

Per nascondere

getSupportActionBar().hide(); 

per mostrare

getSupportActionBar().show(); 

Può anche essere fatto da frammenti

Per nascondere

getActivity().getSupportActionBar().hide(); 

Per mostrare

getActivity().getSupportActionBar().show(); 

Edit:

Come notato da @RenniePet,

È necessario chiamare ((AppCompatActivity)getActivity()).getSupportActionBar(), se si sta utilizzando Toolbar come ActionBar.

+2

Per l'utilizzo in un frammento, ho dovuto eseguire questa operazione: "((AppCompatActivity) getActivity()). GetSupportActionBar(). Show();" – RenniePet

+0

sì, è corretto. fratello. @RenniePet – theapache64

9

di estendere l'attività come AppCompatActivity e quindi utilizzare barra delle azioni come: -

getSupportActionBar().hide(); // for hiding 
getSupportActionBar().show(); // for showing 
+2

Come nota, 'ActionBarActivity' è ora deprecato. Dovrebbe essere invece usato 'AppCompatActivity' –

+0

La chiamata' hide' non ha alcun effetto nella mia app. –

0

Spero che questo possa essere una soluzione. Ha funzionato sul mio sistema:

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

Questo impone l'uso del tema obsoleto e non copre appcompat. –

4
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light"> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

rimuovere android nei voce windowActionbar.just come segue:

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

Spero che possa aiutare.

+1

necessario rimuovere Android da Android: windowNoTitle troppo. –

0

Congeda ToolBar per tutte le attività con AppTheme:
styles.xml:

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

AppCompatActivity ha una propria barra degli strumenti incorporato. Non è necessario utilizzare la definizione di barra degli strumenti aggiuntiva nel file XML principale.

basta chiamare getSupportActionBar().spettacolo()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getSupportActionBar().show(); 
} 

public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 

     TextView text1=(TextView)findViewById(R.id.textView); 
     text1.setText("I changed the text!"); 

    } 

    return super.onOptionsItemSelected(item); 
} 
2

Nel metodo onCreate, dopo setContentView, utilizzare questo semplicemente per mostrare o nascondere per ogni classe.

getSupportActionBar().hide(); 
getSupportActionBar().show(); 

Se si desidera impostare titolo,

getSupportActionBar().setTitle("This is ToolBar");