Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Smoother transition from fullscreen activity using ActionBarSherlock

I'm developing an Android application which uses ActionBarSherlock (ABS) and needs to work in API >=8. The problem is that some transitions between activities aren't smooth enough.

For example: I have two activities, (A) one which is always fullscreen and (B) another one which isn't fullscreen (status bar and action bar are shown). The transition needed is always from A to B. When it occurs and B activity is loaded, all the content (included ABS) is shown as if the activity was fullscreen and then resizes when the status bar is loaded again. In some devices this effect is insignificant but in other ones it becomes really annoying and even causes that the user touches the wrong section of the view.

Fullscreen declaration is made via Manifest activity's "theme" property (anything by code). For example:

<activity
    android:name = "...."
    android:screenOrientation = "portrait"
    android:theme = "@android:style/Theme.NoTitleBar.Fullscreen">
</activity>

Searching on the Internet for some solution, I've found two main approaches:

1) To use the Android appcompat library and enabling action bar overlay as mentioned here: https://developer.android.com/training/basics/actionbar/overlaying.html#EnableOverlay.
The problem with this is that the app also uses the HoloEverywhere library and many errors appeared when using HoloEverywhere + appcompat. All this errors were related to duplicated XML elements. I've also checked android-support-v4 library in all projects to avoid errors.

2) Using WindowManager flags and applying top padding to the view: http://nubinewsblog.blogspot.com.es/2009/11/smooth-full-screen-transition.html.
With this approach the transition is perfect. The biggest problem - and the reason I need to ask this - is that I'm not able to apply a top margin to ABS and the status bar is shown over the action bar. I can move down all elements except ABS. I suppose it occurs because ABS uses many fixed dimensions and attributes.

I prefer to use the second way (2) but I can try everything needed to make the transition smoother. Any further implementation details needed can be asked and I'll try to answer ASAP. I'd be very grateful for any info or help provided :-)

Really thanks to all for your time.

PS: I'm currently using and Android 2.3.6 device for testing.

PS: when I say fullscreen I always refer to fullscreen + no status bar + no action bar.

like image 414
GReaper Avatar asked Nov 27 '13 09:11

GReaper


1 Answers

I've solved my problem doing the following:

1.- I have to optimize all the screens where the AB was shown. In some cases I used ListViews which weren't correctly implemented and that caused a noticeable load time in the activity.

2.- I have shown the status bar BEFORE starting the new activity. I mean: I've shown the status bar in the fullscreen activity just before starting the non-fullscreen one. With that I achieved that the layout of the second activity (non-fullscreen) was never resized.

With this two little changes now the AB transition is much more smoother.

I close this question but, if someone has any doubt, I will be pleased to answer it. Last but not least, ¡thanks to all who tried to help with this problem!

like image 147
GReaper Avatar answered Nov 15 '22 12:11

GReaper