【问题标题】:Android app SDK: exclude status bar from transition's animationAndroid 应用 SDK:从过渡动画中排除状态栏
【发布时间】:2014-08-05 23:54:51
【问题描述】:

我遵循了 Google 的标准 Android SDK 教程,并且已经到了可以更改操作栏选项的地步。

当打开一个不同的 Activity 时,它会以动画的形式出现(淡入 + 增长)。我的问题是这个活动中的新动作栏也与动画一起弹出(它都作为一个容器连接)我希望动作栏保持在顶部,固定,而只有应用程序的内容弹出。当动作栏的内容发生变化,它应该只是改变而没有任何动画。例如,看看 Telegram 应用程序。

当我按照标准教程进行操作时,我想这是默认行为,因此关闭它可能很常见,但我还没有在任何地方找到可行的解决方案,所以我必须忽略一些非常基本的设置。

主题.xml:

...
<style name="BlaTheme"
       parent="@style/Theme.AppCompat">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
    <item name="android:actionMenuTextColor">@color/actionbar_text</item>
    <item name="android:background">@color/darkpurple</item>
    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/MyActionBar</item>
    <item name="actionBarTabTextStyle">@style/MyActionBarTabText</item>
    <item name="actionMenuTextColor">@color/actionbar_text</item>
    <item name="android:windowActionBar">true</item>  
    <item name="android:windowContentOverlay">@null</item>
</style>

<!-- ActionBar styles -->
<style name="MyActionBar"
       parent="@style/Widget.AppCompat.ActionBar">
    <item name="android:background">@android:color/transparent</item>
    <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
    <!-- Support library compatibility -->
    <item name="titleTextStyle">@style/MyActionBarTitleText</item>
</style>
...

【问题讨论】:

    标签: java android sdk statusbar


    【解决方案1】:

    你可以像这样定义你的过渡:

    1. 在 fade.xml 文件中:

      <?xml version="1.0" encoding="utf-8"?>
      <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
          <fade android:duration="500">
              <targets>
                  <!--excluding status bar--> 
                  <target android:excludeId="@android:id/statusBarBackground"/>
                  <!--excluding navigation bar-->
                  <target android:excludeId="@android:id/navigationBarBackground"/>
                  <!--excluding toolbar bar-->
                  <target android:excludeId="@id/toolbar"
              </targets>
          </fade>
      </transitionSet>
      

    然后设置为:

        Transition mFadeTransition =
                TransitionInflater.from(this).
                        inflateTransition(R.transition.fade);
    
        getWindow().setEnterTransition(mFadeTransition);
    
    1. 或者只使用java:

      Fade fade = new Fade();
      fade.setDuration(500);
      //exclude toolbar
      fade.excludeTarget(R.id.toolbar, true);
      //exclude status bar
      fade.excludeTarget(android.R.id.statusBarBackground, true);
      //exclude navigation bar
      fade.excludeTarget(android.R.id.navigationBarBackground, true);
      
      getWindow().setEnterTransition(fade);
      

    【讨论】:

    • 在我的情况下 fade.excludeTarget(R.id.toolbar, true) 不起作用。可能是因为工具栏来自主题,例如直接Theme.AppCompat.Light.DarkActionBar?跨度>
    • 它仍然对我有用,也许你可以分享更多细节,比如什么 android 版本和什么设备。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多