【问题标题】:how to intercept android applying main activity theme upon app launch如何在应用启动时拦截应用主要活动主题的android
【发布时间】:2016-11-22 10:00:17
【问题描述】:

我尝试在此https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 之后创建启动画面,其中主活动的自定义主题用于显示启动画面。

<?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="@mipmap/ic_launcher"/>
    </item>
</layer-list>

但我需要在主题的图层列表项中使用图像作为背景,而不是纯色。问题是,正如许多人在其他地方指出的那样,似乎没有办法让背景图像按比例缩放中心裁剪填充屏幕,就像您可以在布局中使用 ImageView 所做的那样。 我尝试根据屏幕尺寸以编程方式使用原始的可绘制位图创建一个新的可绘制位图,然后替换原始可绘制。 然而,这不起作用,因为主要活动主题在启动后立即显示并且在应用程序的构造函数之前,或者活动的构造函数或它们的 onCreate 被调用。 在主要活动主题的 windowBackground 出现在屏幕上之前,是否有替换该可绘制对象?

【问题讨论】:

    标签: android scale drawable splash-screen layer-list


    【解决方案1】:

    。我尝试根据屏幕尺寸以编程方式使用原始的可绘制位图创建一个新的可绘制位图,然后替换原始可绘制。然而,这不起作用,因为主要活动主题在启动后立即显示,并且在应用程序的构造函数之前,或者活动的构造函数或它们的 onCreate 被调用。

    对于您正在使用的方法,您的 java 代码将无用,因为您正在使用在活动开始之前调用的主题。所以我唯一能想到的就是改变drawable本身。

    问题是,正如许多人在别处指出的那样,似乎没有办法让背景图像按比例缩放,中心裁剪填充屏幕,就像在布局中使用 ImageView 所做的那样。

    这就是棘手的地方。为了让我们在填充屏幕的同时保持比例,必须处理图像本身。最好的方法是为每个特定尺寸的屏幕(ldpi、mdpi、hdpi、xhdpi、xxhdpi)创建图像。为各种显示尺寸加载这些图像(例如:drawable-hdpi 将存储 hdpi 分辨率的图像)将允许图像尺寸在各种屏幕分辨率下几乎保持不变。

    以下链接将提供各种显示器的最小屏幕尺寸https://stackoverflow.com/a/42177842/7550472

    通过一些实验,您可以在初始屏幕中获得所需的精确大小的图像,而无需更改代码从你的角度出发。您所要做的就是为不同的显示器设置不同尺寸的图像,它就会按照您的规格工作。

    注意:对于图像大小调整,您可以使用 Adob​​e Photoshop(我发现它更容易使用)。

    根据喜好,您也可以使用9 Patch 图片,这样图片的边框可以拉伸到适合屏幕大小,而不影响图片的静态区域。

    http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2011-09-03
      • 2023-03-05
      • 2014-02-08
      相关资源
      最近更新 更多