6

Na Android 5.0 Lollipop,Jak mogę wykluczyć ActionBar podczas przejścia pomiędzy działaniami na Androidzie 5.0

mam dwa działania A i B. Działalność B ma slie wprowadzić przejście od dołu z nakładką ActionBar, ale kiedy pokazuje B , ActionBar również przesuwa się od dołu do góry.

W jaki sposób można zapobiec przesunięciu paska czynności z przesunięciem slajdu. czy system actionbar ma identyfikator, który mogę dodać do celu wykluczenia?

dziękuję!

+0

Rozważ użycie paska narzędzi wprowadzonego w Lollipop, aby uzyskać większą elastyczność z nagłówkiem. – tambykojak

+0

Ponieważ używasz animacji okna, jest ona również stosowana do paska akcji. Proponuję użyć fragmentu i animować go od dołu do góry. –

Odpowiedz

6

Jeśli używasz bibliotekę AppCompat v7, nie jest łatwe:

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

Niestety, pasek akcja widok pojemnik ID nie jest częścią publicznych API, więc jeśli nie korzystasz z biblioteki AppCompat v7 (tj używasz oficjalnych bibliotek ramowe) trzeba będzie obejść stosując poniższy kod, aby pobrać identyfikator zamiast:

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

Zauważ, że ten kod będzie złamać, jeżeli nazwa ID zmiany pasku pojemnik akcja w przyszłą wersję Androida. Wątpię, że to się kiedykolwiek zmieni ...

Zobacz this post w celu uzyskania innych powiązanych informacji.

+1

Co to jest slideTransition? –

+0

Zmieniłem nazwę 'slideTransition' na' enterTransition' w mojej odpowiedzi. Powodem, dla którego nazwałem to "slideTransition", było to, że OP zapytał o to, w jaki sposób wprowadzić zmianę typu "slide-up enter". –

+0

Czy istnieje mimo to określenie tego typu ograniczenia w xml? – avlacatus

5

Moje rozwiązanie jest rozszerzenie styl z tego 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> 

To tutaj jest mój 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> 

To tutaj jest mój 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> 

Możesz odtwarzać te przejścia, jak chcesz, ważne są tylko te wykluczone cele.

+0

Ten zadziałał dla mnie. – henry000

+0

Być może to działałoby lepiej, gdyby były 2 przejścia po slajdzie, jedna dla wejścia i jedna dla wyjścia - przesuwanie w przeciwnych kierunkach. To mi pomogło. –

Powiązane problemy