Android - 相同的drawable包含windowBackground在布局时不是相同的大小

时间:2016-01-08 18:38:17

标签: android android-layout splash

我正在创建一个带图像的启动画面,我将添加一个动画。所以我从这个活动开始:

            <activity
                android:name=".activities.SplashActivity"
                android:label="@string/app_name"
                android:theme="@style/SplashTheme">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

这使用以下主题:

        <style name="SplashTheme" parent="Theme.AppCompat.Light">
            <item name="android:windowBackground">@drawable/loading_page_4</item>
        </style>

我正在使用它在布局渲染时立即启动图像。然后在活动的onCreate方法中,我设置了以下布局文件:

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:foreground="@drawable/loading_page_4"
        android:id="@+id/splash_color_layout" >
    </FrameLayout>

出于某种原因,尽管是相同的可绘制,但是当页面被渲染时,图像显示略有不同(它稍微向下移动,甚至可能稍微调整大小)。有没有办法使用相同的drawable从主题背景无缝过渡到渲染的布局?

以下是活动类:

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Splash screen view
            setContentView(R.layout.activity_splash);
        }
     }

1 个答案:

答案 0 :(得分:1)

所以,这里的区别在于,Activity的高度将与显示它的Window的高度不同。由于状态栏和导航栏(在带有软件导航键的设备上)等系统镶边,活动高度将会缩短。

为了达到您想要的效果,您有两个选择:

1)使用getWindow().getDecorView()

的尺寸计算窗口的“真实中间”

2)(可能仅适用于21岁以上)使用稳定的布局将活动设置为全屏:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
  • 这将使您的内容与窗口大小相同。

3)等待布局在徽标视图中使用alpha动画淡化,而不是将其放在窗口背景中

  • 除非你的设计师真的抱怨......延迟可能不会伤害任何事情......