显示自动适合的启动画面图像

时间:2012-09-26 18:04:25

标签: android xamarin.android splash-screen aspect-ratio

我使用以下样式显示用MonoDroid编写的Android应用程序的启动画面。然而,它似乎采取图像并最大化它以适应整个屏幕,同时搞乱了纵横比。因此,图像看起来很大很糟糕。

有没有办法让它最大化,但保持宽高比,所以它仍然看起来不错?

<style name="Theme.Splash" parent="android:Theme">
  <item name="android:windowBackground">@drawable/splashscreenimage</item>
  <item name="android:windowNoTitle">true</item>
</style>

这是C#中的活动,它创建启动画面并转到登录。

  [Activity(MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true)]
  public class SplashScreenActivity : Activity
  {
    protected override void OnCreate(Bundle bundle)
    {
      base.OnCreate(bundle);

      // Start our real activity
      StartActivity(typeof(LoginActivity));
    }
  }

2 个答案:

答案 0 :(得分:29)

Android中有多种类型的drawable,包括实际位图,九个补丁和XML文件。尝试使用XML文件包装图像文件,该文件为其提供属性,然后将XML文件用作drawable而不是源图像。

假设您的xml文件名为scaled_background,原始图像只是background.png:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:src="@drawable/background" />

不是将背景设置为引用@drawable/background,而是将其设置为引用XML文件:在此示例中为@drawable/scaled_background。有关缩放模式的详细信息,请参阅Drawable documentation

答案 1 :(得分:5)

  

它似乎拍摄图像并使其最大化以适应整个屏幕   而弄乱了宽高比。因此,图像看起来很大   可怕的。

     

有没有办法让它最大化,但保持宽高比   它看起来还不错?

图像放大的原因是因为您使用的图像比正在测试应用程序的设备屏幕的分辨率更高的像素。为了解决这个问题,最好的方法是创建图像不同的设备屏幕的适当大小(像素),然后相应地将它们放在 drawable 文件(drawable-ldpi,drawable-mdpi,drawable-hdpi等)中。

以下是Google提供的各种显示的最小屏幕尺寸列表(全部以像素为单位): -

Android移动设备

LDPI- 426 x 320

MDPI- 470 x 320

HDPI- 640 x 480

XHDPI- 960 x 720

对于 Android平板电脑设备

LDPI- 200 x 320

MDPI- 320 x 480

HDPI- 480 x 800

XHDPI- 720 x 1280

现在在res / drawable中创建一个 XML drawable ,它将使用layer-list在主题(Theme.Splash)中提供启动活动的背景。该图片已加载到<bitmap>中心使用 gravity属性对齐。

<!-- 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/gray"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/splashscreenimage"/>
    </item>

</layer-list>

现在修改您的样式 (Theme.Splash) ,并将 background_splash.xml 设置为您的启动活动的<主题中的em> background 。

<style name="Theme.Splash" parent="android:Theme">
    <item name="android:windowBackground">@drawable/background_splash.xml</item>
    <item name="android:windowNoTitle">true</item>
</style>

这样,图像应设置在中心,并保持纵横比。

注意:对于图像大小调整,您可以使用Adobe Photoshop(我发现它更容易使用)。必须进行一些实验才能获得所需的正确图像尺寸。

根据偏好,您还可以使用 9 Patch image ,以便图像的边框可以拉伸以适应屏幕的大小,而不会影响图像的静态区域。

参考链接:

构建启动画面: https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

启动画面图像尺寸: android splash screen sizes for ldpi,mdpi, hdpi, xhdpi displays ? - eg : 1024X768 pixels for ldpi