Context
Step1: В настоящее время у меня есть одно действие, которое использует android:windowBackground
, чтобы установить начальный фон, пока мы ожидаем загрузки действия.Это загружает растровое изображение, которое должно быть выровнено по центру.
Step2: Как только действие загружено, оно делает простой setContentView
, чтобы установить фон для действия, которое теперь заменит android:windowBackground
с step1 .Это загружает imageView
, который должен быть выровнен по центру.
Проблема в том, что оба они не выровнены по центру, есть какое-то смещение на одном или другом, смещающее их.Маби статусбар толкает вниз один?Я не уверен.Любые идеи, почему они не совпадают?
Я хотел бы, чтобы они оба были выровнены по центру.Я попытался использовать fitSystemWindows="true"
безуспешно.
Когда я добавляю android:layout_marginTop="12dp"
к макету активности (activity_start_onboarding.xml
) imageView
оба выравниваются нормально, но это не выравнивается для всех плотностей, другие плотностивыровнены.
Маби, есть способ динамически рассчитать это смещение, чтобы затем выровнять его для всех плотностей?
Сравнить изображения
Слева (серый) - Step1 (фон окна):
Справа (синий) - Step2 (макет активности):
Код
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>
@drawable / 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>
ActivityStartOnboarding.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>