如何在启动画面后进行同心布局

时间:2016-08-23 08:32:40

标签: android android-layout

我的启动画面是应用主题中的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>

2 个答案:

答案 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}"