使用ActionBarSherlock从全屏活动更平滑过渡

时间:2013-11-27 09:17:39

标签: android actionbarsherlock android-appcompat

我正在开发一个使用ActionBarSherlock ABS )的 Android应用程序,需要使用API​​> = 8 。问题是活动之间的某些转换不够顺利

例如:我有两个活动,(A)一个始终全屏,(B)另一个不全屏(状态栏显示操作栏)。所需的转换始终是从A到B.当它发生并加载B活动时,所有内容(包括ABS)都显示为活动是全屏的,然后在状态栏加载时调整大小再次。 在某些设备中,这种效果是微不足道的,但在其他设备中,它变得非常烦人,甚至导致用户触摸视图的错误部分。

全屏声明是通过Manifest 活动的“主题”属性(任何代码)进行的。例如:

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

在互联网上搜索某些解决方案,我找到了两种主要方法

1) 要使用Android appcompat库并启用操作栏覆盖 ,如下所述:https://developer.android.com/training/basics/actionbar/overlaying.html#EnableOverlay
这个问题是该应用程序还使用了 HoloEverywhere 库,并且在使用 HoloEverywhere + appcompat 时出现了许多错误。所有这些错误都与重复的XML元素有关。我还检查了所有项目中的 android-support-v4 库,以避免错误。

2) 使用WindowManager标记并在视图中应用顶部填充 http://nubinewsblog.blogspot.com.es/2009/11/smooth-full-screen-transition.html
通过这种方法,过渡是完美的。最大的问题 - 以及我需要提出这个问题的原因 - 是我无法将上边距应用于 ABS ,状态栏显示在操作栏上。除了 ABS 之外,我可以向下移动所有元素。我想这是因为 ABS 使用了许多固定的维度和属性。

我更喜欢使用第二种方式(2)但我可以尝试使过渡更平滑所需的一切。可以询问任何进一步的实施细节,我会尽快回答。我非常感谢所提供的任何信息或帮助: - )

非常感谢您的所有时间

PS:我目前正在使用 Android 2.3.6设备进行测试

PS:当我说全屏时我总是指全屏+没有状态栏+没有操作栏

2 个答案:

答案 0 :(得分:1)

解决了我的问题以下内容:

1.-我必须优化显示AB的所有屏幕。在某些情况下,我使用的ListViews没有正确实现,并且在活动中引起了明显的加载时间。

2.-我在开始新活动之前显示了状态栏。我的意思是:在启动非全屏幕活动之前,我已在全屏活动中显示状态栏。由此我实现了第二个活动(非全屏)的布局从未调整过大。

现在这两个小小的变化使AB过渡更加平滑。

我关闭了这个问题但是,如果有人有任何疑问,我将很乐意回答。最后但同样重要的是,感谢所有试图帮助解决这个问题的人!

答案 1 :(得分:0)

最好的解决方案是清除第一个(全屏)活动的onPause方法上的全屏标志

 @Override
protected void onPause(){
    super.onPause();
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}