29

我正在使用以下样式显示用 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));
    }
  }
4

2 回答 2

34

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

假设您的 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 文档中提到了缩放模式的详细信息。

于 2012-09-27T22:39:25.437 回答
7

它似乎会拍摄图像并将其最大化以适应整个屏幕,同时弄乱纵横比。因此,图像看起来巨大而可怕。

有没有办法让它最大化,但保持纵横比仍然看起来不错?

图像被放大的原因是因为您使用的图像的像素高于您正在测试应用程序的设备屏幕的分辨率。为了解决这个问题,最好的方法是为不同的设备屏幕创建适当大小(像素)的图像然后将它们相应地放入可绘制文件(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,它将在主题(Theme.Splash)中使用layer-list. 图像被加载<bitmap>并使用重力属性居中对齐。

<!-- 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设置为主题中启动活动的背景

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

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

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

According to preference, you may also use 9 Patch image so that the image's border can stretch to fit the size of the screen without affecting the static area of the image.


Reference Links :

Building Splash Screen: https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

Splash Screen Image sizes: android splash screen sizes for ldpi,mdpi, hdpi, xhdpi displays ? - eg : 1024X768 pixels for ldpi

于 2017-02-11T21:02:32.823 回答