在Android中的多个活动中保持相同的背景,并将其从活动转换中排除

时间:2011-01-22 00:54:05

标签: android android-layout android-manifest

我目前正在开发Android应用程序。基本上,我有多个ViewFlipper,它们将用于创建“面板”集。例如,我有一个ViewFlipper来模拟主屏幕环境(可以通过向左或向右滑动访问多个面板),以及一个不同的ViewFlipper来模拟应用程序启动器(喜欢的应用程序的面板,所有应用程序,设置等) 。我通过创建每组面板或每个ViewFlipper自己的活动来完成这项工作,以便在未使用一组面板时保留内存。

基本上,我希望在所有活动中保留相同的背​​景图像。现在,我知道这可以通过创建样式并将其应用于清单中的标签来完成,但我的问题是背景图像包含在活动过渡动画中(我自己的自定义动画已设置,但无论如何,如果使用股票过渡动画,则包含背景图像。

所以,我要问的是,有没有办法在多个活动之间保留一个共同的背景图像,而这些活动在活动之间切换时不是动画的?

目前,我的样式xml文件如下所示:

<style name="Theme" parent="android:Theme">
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowBackground">@drawable/background_port</item> 
</style>

正如您所看到的,相同的drawable被设置为所有活动的背景,但它包含在活动之间的过渡动​​画中,这是我不想要的。我也试过android:detachWallpaper =“true”,但在这种情况下似乎没用。

我在Android代码方面经验丰富,所以无需用简单的方式解释。如果我不明白,我会问。

感谢您的帮助,非常感谢。

3 个答案:

答案 0 :(得分:2)

我认为没有一个简单的解决方案可以解决这个问题,但我过去做过的事情是为了得到类似的事情。我通过在startActivity之后调用overridePendingTransition(0,0)之类的东西来删除活动转换。

然后,当活动即将发生变化时,我会在屏幕上手动为视图元素设置动画,然后在新活动中为屏幕上的新视图元素设置动画。

另外,在旁注中,如果您正在使用一个简单易用的面板类型视图组件,请查看SwipeView https://github.com/fry15/uk.co.jasonfry.android.tools

答案 1 :(得分:2)

不要使用活动。你只是试图将一个Activity变成像这样集成的行为,从而使你想做的事情变得非常复杂。使用视图。你说你想使用活动来节省内存,但它们不会节省你的记忆,并且比简单的视图更重要。通过视图,您可以在UI中完成控制,这基本上就是您所要求的。如果您希望尽可能高效地展示您希望在显示它们时显示的视图,并删除不再显示的视图层次结构的旧部分,以便可以进行GC。

答案 2 :(得分:1)

老问题,但万一有人遇到这个问题。

虽然我同意hackbod的回答,但对于简单的用例,有一种方法可以在API 21中实现。

活动1

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:id="@+id/activity_root"
  android:transitionName="activity_root"

  android:layout_width="match_parent"
  android:layout_height="match_parent"

  android:background="@drawable/main_bg"
  android:backgroundTint="#4d000000"
  android:backgroundTintMode="src_over"
  >

  <!-- Activity 1 stuff -->
</RelativeLayout>

活动2

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:id="@+id/activity_root"
  android:transitionName="activity_root"

  android:layout_width="match_parent"
  android:layout_height="match_parent"

  android:background="@drawable/main_bg"
  android:backgroundTint="#4d000000"
  android:backgroundTintMode="src_over"
  >

  <!-- Activity 2 stuff -->
</RelativeLayout>

然后你可以开始你的第二个活动:

Intent startIntent = new Intent(Activity1.this, Activity2.class);

Bundle b = ActivityOptionsCompat
  .makeSceneTransitionAnimation(Activity1.this,
    new Pair<>(findViewById(R.id.logo), "logo"), //Or whatever other elements you don't want moving around
    new Pair<>(findViewById(R.id.activity_root), "activity_root"))
  .toBundle();

startActivity(startIntent, b);