Android应用XML Drawable启动屏与后续Activity图标对齐错位问题
解决启动屏与Activity中图标位置不一致的问题
我来分享几个简便的修复方案,帮你搞定这个图标位置偏移的问题:
方案1:统一系统窗口Insets的处理逻辑
启动屏的windowBackground是直接绘制在窗口层级,不受Activity布局中fitsSystemWindows的影响;而你的第二个Activity父视图因为设置了这个属性,会自动为系统状态栏/导航栏留出空间,导致背景图标位置被“挤”上去了。
你可以给SplashTheme也添加fitsSystemWindows的配置,让启动屏和Activity的窗口Insets处理保持一致:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/splash_screen_drawable</item> <item name="android:fitsSystemWindows">true</item> <!-- 适配AppCompat库的属性 --> <item name="fitsSystemWindows">true</item> </style>
这样两者的窗口都会为系统栏留出空间,图标位置就能对齐了。
方案2:给Activity的背景Drawable添加偏移补偿
如果不想修改启动屏主题,你可以给Activity父视图的背景套一个inset Drawable,手动补偿位置差:
- 创建一个新的Drawable文件(比如
activity_splash_background.xml):
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="?android:attr/statusBarSize"> <!-- 引用你原来的启动屏Drawable --> <include layout="@drawable/splash_screen_drawable" /> </inset>
- 把Activity父视图的背景改成这个新的Drawable:
<LinearLayout ... android:background="@drawable/activity_splash_background" android:fitsSystemWindows="true">
通过insetTop设置和状态栏高度一致的偏移,就能让图标位置和启动屏对齐。
方案3:调整Drawable的gravity参数
你可以尝试修改splash_screen_drawable里的bitmap gravity,换成更精确的组合,适配不同机型的窗口布局:
<item> <bitmap android:gravity="center|clip_vertical" android:src="@drawable/splash_screen_icon"/> </item>
以上几个方案都是不用大改现有代码的简便方法,优先试试方案1,最省心~
内容的提问来源于stack exchange,提问作者Johannes
相关产品推荐
相关产品推荐

