让Android活动布局看起来与启动画面图像相同

5
我正在制作一个启动界面,通过更改
<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/background_splash</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

主题的属性。

这个drawable/background_splash看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
    <item android:drawable="@color/colorPrimary"/>
    <item>
        <bitmap
            android:src="@drawable/ic_logo_black"
            android:gravity="center"/>
    </item>
</layer-list>

对于我的启动活动,它在后台进行一些计算,然后根据条件导航到其他活动。这个计算需要服务器,所以它会在这个活动上停留一段时间。

为了使体验更好,我希望这个活动看起来与闪屏屏幕相同。

因此,我基本上是为布局做了这个。

<?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="@drawable/background_splash"
    android:orientation="vertical">

</RelativeLayout>

然而,使用这种设置后,我发现一旦从闪屏界面进入启动器活动,标志会向上移动约5-10像素。我的问题是,我该怎么做才能完全消除这种偏移?我可以显然地硬编码一些周围的边距。但我不确定这是否适用于所有设备尺寸。那个5-10像素的偏移是什么呢?我基本上在布局中使用了与背景相同的图像。 我注意到,如果我不为我的splashActivity布局设置任何背景,这个问题就解决了。但我仍然想要一个背景,因为在我的用户工作流程中,用户可能会被重定向到这个屏幕。我不希望他们看到一个空白的屏幕 =/。
4个回答

1
感谢您的提问。我找到了一种方法,将'drawable/background_splash'更改为

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
     <item>
       <color android:color="@color/colorPrimary" />
     </item>
     <item  android:bottom="48dp">
         <bitmap
             android:src="@drawable/ic_logo_black"
             android:layout_width="wrap_content"
             android:tileMode="disabled"
             android:layout_height="wrap_content"
             android:scaleType="fitCenter"/>
     </item>
 </layer-list>

似乎闪屏布局中的状态栏高度(48dp)未被绑定!

0

我不知何故没有为我的SplashActivity设置任何背景图片。

然后它是透明的并看到了初始窗口背景。


0

imageImageView绑定始终更好、更安全。

SplashLauncher活动中,只需在RelativeLayout内放置一个ImageView并将scaleType设置为centerCrop即可。


我没有启动活动。我只有一个使用可绘制对象的启动屏幕。我尝试使用包含ImageView的RelativeLayout,但似乎不起作用 - 仍然是相同的向上移动行为。 - Zhen Liu

0

此处所述

android:background是视图组件的背景颜色(确切地说是可绘制对象),而android:windowBackground是窗口(活动或对话框)的背景颜色,即您的视图所在的窗口。因此,这可能是5像素填充的原因之一。(我不确定)。

另一方面,您可以通过执行以下操作动态设置启动器活动的主题:

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
}

只需记得在super.onCreate之前使用setTheme


我基本上是按照你编写的代码来实现启动画面的。=/ - Zhen Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接