我的启动画面是应用主题中的layer-list
可绘制背景。这是它:
background_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/dark_blue"/>
<item android:top="100dp">
<bitmap
android:gravity="top"
android:src="@mipmap/img_logo"/>
</item>
</layer-list>
如您所见,我从顶部放置带有边距100dp
的徽标。然后我尝试在我的片段布局中做同样的事情:
fragment_start.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg_create_account">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/img_logo"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp" />
</RelativeLayout>
但布局中的徽标显示低于启动画面上的徽标。我想,问题在于Activity
的默认边距。但如果我设置:
<dimen name="activity_horizontal_margin">0dp</dimen>
<dimen name="activity_vertical_margin">0dp</dimen>
什么都没发生。我总是看到&#34;跳跃&#34;标志从上到下约10-20 dp。我怎么能避免它?
编辑:我的活动xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</LinearLayout>
编辑2:我试图手动拿起距离,如果我设置<item android:top="125dp">
(或126dp)并离开android:layout_marginTop="100dp"
,我看不到&#34;跳跃&#34;。这意味着差异是25或26 dp,但它们在哪里?
编辑3:根据布莱恩的回答,该问题仅存在于Android 4.4(API 19)及更高版本中。为了避免这种情况,我使用以下内容覆盖文件夹styles.xml
中的values-19
<item name="android:windowTranslucentStatus">true</item>
答案 0 :(得分:1)
您在启动画面中使用的可绘性似乎不考虑status bar的大小,但Activity
的大小。这是您正在观察的~25dp的差异,尽管~25dp的高度并不能保证在所有设备上都相同。
答案 1 :(得分:0)
问题可能在ActionBarSize中,请尝试将其添加到SplashScreen:
没有AppCompat
android:paddingTop="?android:attr/actionBarSize"
使用AppCompat
android:paddingTop="?attr/actionBarSize"
或者如果您愿意,(虽然可能被认为是一种不好的做法),您可以使用数据绑定在活动布局中设置负填充:
android:paddingTop="@{-1 * ?android:actionBarSize}"