9

我正在开发一个使用ActionBarSherlock( ABS ) 并且需要在 API >=8 中工作的 Android 应用程序。问题是活动之间的一些过渡不够平滑

例如:我有两个活动,(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:当我说全屏时,我总是指全屏+无状态栏+无操作栏

4

2 回答 2

1

我已经通过以下方式解决了我的问题

1.- 我必须优化所有显示AB 的屏幕。在某些情况下,我使用了未正确实现的 ListView,这会导致活动中出现明显的加载时间。

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

通过这两个小改动,现在 AB 过渡更加平滑。

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

于 2014-04-01T08:18:09.883 回答
0

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

 @Override
protected void onPause(){
    super.onPause();
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
于 2018-08-13T17:51:51.930 回答