第1步:目前我有一个活动使用android:windowBackground
来设置初始背景,同时我们等待活动加载。这会加载一个应该居中对齐的位图。
第二步:一旦活动被加载,它会做一个简单的setContentView
来设置活动的背景,现在将替换步骤1中的android:windowBackground
。这会加载一个imageView
,它应该居中对齐。
问题是它们不是两个对齐的中心,在一个或另一个上有某种偏移使它们不对齐。 Maby状态栏推下了一个?我不确定。任何想法为什么他们不一致?
我想让他们两个中心对齐。我尝试过使用fitSystemWindows="true"
没有运气。
当我将android:layout_marginTop="12dp"
添加到活动(activity_start_onboarding.xml
)布局时,imageView
两者都很好地排列,但它并不对齐所有密度,其他密度未对齐。
Maby有一种方法可以动态计算这个偏移量,然后对齐所有密度吗?
左(灰色) - Step1(windowBackground): 右(蓝色) - 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>
@绘制/ 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:fitsSystemWindows="true"
那是你的问题。你的FrameLayout开始在状态栏下膨胀,其高度为~25dp,因此AppCompatImageView要高一些。
第一个解决方案:从android:fitsSystemWindows="true"
FrameLayout中删除activity_start_onboarding.xml
。
第二个解决方案:将<item name="android:windowDrawsSystemBarBackgrounds">true</item>
添加到你的ColdstartSplashTheme
。背景开始在状态栏下绘制,位图将更高。
使用background而不是windowBackground
<style name="ColdstartSplashTheme" parent="SuperbalistTheme.Dark">
<item name="android:background">@drawable/splash_background</item>
</style>