使用Activity ImageView中心Android WindowBackground

问题描述 投票:6回答:2

Context

第1步:目前我有一个活动使用android:windowBackground来设置初始背景,同时我们等待活动加载。这会加载一个应该居中对齐的位图。

第二步:一旦活动被加载,它会做一个简单的setContentView来设置活动的背景,现在将替换步骤1中的android:windowBackground。这会加载一个imageView,它应该居中对齐。

问题是它们不是两个对齐的中心,在一个或另一个上有某种偏移使它们不对齐。 Maby状态栏推下了一个?我不确定。任何想法为什么他们不一致?

我想让他们两个中心对齐。我尝试过使用fitSystemWindows="true"没有运气。

当我将android:layout_marginTop="12dp"添加到活动(activity_start_onboarding.xml)布局时,imageView两者都很好地排列,但它并不对齐所有密度,其他密度未对齐。

Maby有一种方法可以动态计算这个偏移量,然后对齐所有密度吗?


Compare Images

左(灰色) - Step1(windowBackground): 右(蓝色) - Step2(活动布局):enter image description here


The Code

AndroidManifest.xml中

<activity android:name=".view.onboarding.ActivityStartOnboarding"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/ColdstartSplashTheme">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

styles.xml

<style name="ColdstartSplashTheme" parent="SuperbalistTheme.Dark">
    <item name="android:windowBackground">@drawable/splash_background</item>
</style>

@绘制/ splash_background

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/grey_mid_dark" />

<item>
    <bitmap
        android:gravity="center"
        android:src="@drawable/ic_delivery_free_raster" />
</item>

activity start onboard ing.Java

public class ActivityStartOnboarding extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_onboarding);
  }
}

activity_start_onboarding.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/blue_light_darker"
        android:fitsSystemWindows="true">

        <androidx.appcompat.widget.AppCompatImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/splash_background" />
    </FrameLayout>
</layout>
android splash
2个回答
5
投票
android:fitsSystemWindows="true"

那是你的问题。你的FrameLayout开始在状态栏下膨胀,其高度为~25dp,因此AppCompatImageView要高一些。

第一个解决方案:从android:fitsSystemWindows="true" FrameLayout中删除activity_start_onboarding.xml

第二个解决方案:将<item name="android:windowDrawsSystemBarBackgrounds">true</item>添加到你的ColdstartSplashTheme。背景开始在状态栏下绘制,位图将更高。


-1
投票

使用background而不是windowBackground

<style name="ColdstartSplashTheme" parent="SuperbalistTheme.Dark">
    <item name="android:background">@drawable/splash_background</item>
</style>
© www.soinside.com 2019 - 2024. All rights reserved.