java - 安卓应用SDK : exclude status bar from transition's animation

标签 java android sdk statusbar

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

当打开一个不同的 Activity 时,它作为动画弹出(淡入+增长)。我的问题是此 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>
...

最佳答案

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

  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);
    

关于java - 安卓应用SDK : exclude status bar from transition's animation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25150168/

相关文章:

java - 如何在纯java中设置Citrus的全局变量?

java - 无效的列类型 : getInt not implemented for class oracle. jdbc.driver.T4CRowidAccessor

scala - 如何在 IntelliJ 中创建 scala 应用程序并创建 scala 类(Ubuntu)?

Android AdapterView 点击监听器参数 - position & id

iOS - 拒绝代码签名权限,现在无法构建

android - 如何搭建安卓应用开发环境?

java - 将 AllArgsConstructor 与 Spring 注释参数一起使用

java - 如何从 Eclipse 中的验证中排除 .java 文件

java - Android 媒体播放器在准备语句时出错

android - 按下后退按钮时 AsyncTask 终止任务