【问题标题】:Avoid coping same drawable in different drawable folders避免在不同的drawable文件夹中处理相同的drawable
【发布时间】:2014-06-03 03:45:22
【问题描述】:

我的应用中有这个可绘制文件夹:

可绘制

drawable-hdpi、mdpi、ldpi、xhdpi 和 xxhdpi。

可绘制-sw240dp-land-xxxhdpi

可绘制-sw360dp-land-xxhdpi

可绘制-sw6000dp-land-xhdpi

我在所有这些文件夹中都有相同大小的可绘制文件。我需要那些文件夹导致横向密度。

有什么方法可以避免在不同的可绘制文件夹中处理相同的文件?

提前致谢

【问题讨论】:

    标签: android drawable


    【解决方案1】:

    有什么方法可以避免在不同的可绘制文件夹中处理相同的文件?

    首先去掉那些你不需要的:

    • res/drawable/ 是不必要的,因为它永远不会被使用,因为您在各种密度桶中都有可绘制对象。对于您未使用的密度(例如,-tvdpi/),Android 将始终缩放您的 res/drawable-*dpi/ 资源之一以匹配屏幕密度。

    • 如果res/drawable-sw360dp-land-xxhdpi/res/drawable-xxhdpi/ 中的图标文件相同,则不需要res/drawable-sw360dp-land-xxhdpi/

    • 如果res/drawable-sw6000dp-land-xhdpi/res/drawable-xhdpi/ 中的图标文件相同,则不需要`res/drawable-sw6000dp-land-xhdpi/。

    • 等等

    除此之外,您还可以使用bitmap resource aliases 允许一个位图文件在多个资源目录中表示。

    【讨论】:

    • 感谢您的回答...我的可绘制文件夹中有我的 xml 可绘制对象,它对此很有用。 :)
    • @swis.m:抱歉,根据您的问题,我假设每个可绘制对象都在您声明的所有目录中重复。
    【解决方案2】:

    是的,有,但代价是一些轻微的扭曲和仔细的布局设计。你能做的就是把你的高分辨率drawable放到drawable-nodpi中; Android 将从该文件夹中提取可绘制对象而不进行缩放。接下来,为各种屏幕尺寸创建一系列维度文件,dimens.xml。例如,对于正常尺寸的屏幕:

    <resources>    
        <dimen name="dim_0dp">0dp</dimen>
        <dimen name="dim_1dp">1dp</dimen>
        <dimen name="dim_2dp">2dp</dimen>
        <dimen name="dim_3dp">3dp</dimen>
        <dimen name="dim_4dp">4dp</dimen>
        <dimen name="dim_5dp">5dp</dimen>
        <dimen name="dim_6dp">6dp</dimen>
        <dimen name="dim_7dp">7dp</dimen>
        <dimen name="dim_8dp">8dp</dimen>
        <dimen name="dim_9dp">9dp</dimen>
        ...
    </resources>
    

    而且,sw-600dp 平板电脑的资源文件将如下所示:

    <resources>    
        <dimen name="dim_0dp">0dp</dimen>
        <dimen name="dim_1dp">1.5dp</dimen>
        <dimen name="dim_2dp">3dp</dimen>
        <dimen name="dim_3dp">4.5dp</dimen>
        <dimen name="dim_4dp">6dp</dimen>
        ...
    </resources>
    

    然后,在您使用 ImageView 或使用可绘制对象设置背景的布局中的每个位置,请确保根据您的尺寸文件指定宽度和高度。例如:

    <ImageView 
             android:layout_width="@dimens/dim_10dp"
             android:layout_height="@dimen/dim_20dp" />
    

    因此,在手机上,图像将缩放为 10dp 和 20dp;而在 600dp 平板电脑上,它将缩放到 15dp 和 30dp。这意味着一些轻微的失真,但由于您是按比例缩小而不是按比例放大,因此大多数用户很难检测到失真。

    这是我们用于发布三款成功游戏的策略,否则我们的 APK 会非常庞大​​。

    【讨论】:

    • 谢谢,我也试试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多