6

Android 5.0 Lollipop,come posso escludere ActionBar quando le transizioni tra le attività su Android 5.0

ho due attività A e B. attività B ha uno SLIE entrare transizione da fondo con una sovrapposizione ActionBar, ma quando spettacoli B anche l'ActionBar scorre dal basso verso l'alto.

Come posso impedire alla barra di azione di passare dalla diapositiva. la barra delle azioni del sistema ha un ID che posso aggiungere al target di esclusione?

grazie!

+0

Considerare l'utilizzo della barra degli strumenti, introdotta in Lollipop, per una maggiore flessibilità con l'intestazione. – tambykojak

+0

Poiché si utilizzano le animazioni delle finestre, viene applicato anche alla barra delle azioni. Suggerirei di usare un frammento e animarlo dal basso verso l'alto. –

risposta

6

Se si utilizza la libreria AppCompat v7, è facile:

View decor = getWindow().getDecorView(); 
int actionBarId = R.id.action_bar_container; 
enterTransition.excludeTarget(decor.findViewById(actionBarId), true); 

Purtroppo, la barra delle azioni vista contenitore ID non fa parte delle API pubblica, quindi se non si utilizza la libreria AppCompat v7 (vale a dire che si sta utilizzando le librerie framework ufficiali) sarà necessario per risolvere questo utilizzando il seguente codice per recuperare l'ID invece:

int actionBarId = getResources().getIdentifier("action_bar_container", "id", "android"); 

si noti che questo codice si romperà se il nome ID cambiamenti del contenitore barra delle operazioni in una versione futura di Android. Dubito che cambierà comunque ...

Vedere this post per altre informazioni correlate.

+1

Che cos'è slideTransition? –

+0

Ho rinominato 'slideTransition' in' enterTransition' nella mia risposta. Il motivo per cui l'ho chiamato 'slideTransition' era perché l'OP chiedeva come implementare una transizione di inserimento diapositiva. –

+0

Esiste comunque la possibilità di specificare questo tipo di vincolo nel modo xml? – avlacatus

5

La mia soluzione è quella di estendere lo stile con questo args:

<item name="android:windowActivityTransitions">true</item> 
<item name="android:windowContentTransitions">true</item> 
<item name="android:windowEnterTransition">@transition/slide</item> 
<item name="android:windowExitTransition">@transition/slide</item> 
<item name="android:windowAllowEnterTransitionOverlap">true</item> 
<item name="android:windowAllowReturnTransitionOverlap">true</item> 
<item name="android:windowSharedElementEnterTransition">@transition/enter</item> 
<item name="android:windowSharedElementExitTransition">@transition/enter</item> 

Questa è la mia res/transition/slide.xml:

<?xml version="1.0" encoding="utf-8"?> 
<slide xmlns:android="http://schemas.android.com/apk/res/android" android:slideEdge="bottom"> 
    <targets> 
     <target android:excludeId="@android:id/statusBarBackground"/> 
     <target android:excludeId="@android:id/navigationBarBackground"/> 
    </targets> 
</slide> 

Questa è la mia res/transition/enter.xml:

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:targetSdkVersion="19" 
    android:transitionOrdering="sequential"> 
    <targets> 
     <target android:excludeId="@id/action_bar_container"/> 
     <target android:excludeId="@android:id/statusBarBackground"/> 
    </targets> 
    <changeBounds/> 
    <changeTransform/> 
    <changeClipBounds/> 
    <changeImageTransform/> 
</transitionSet> 

Puoi giocare con quelle transizioni a tuo piacimento, importante sono solo quegli obiettivi esclusi.

+0

Questo ha funzionato per me. – henry000

+0

Forse questo funzionerebbe meglio se ci fossero 2 transizioni di diapositiva, una per entrare e una per uscita - scorrevole in direzioni opposte. Questo mi ha aiutato. –