图像与屏幕宽度一样大 Android,dip 似乎没有用
Image as Large as the Width of the Screen in Android, dip seems not useful
我很难弄清楚 Android 指南如何(以及是否)对我想要的东西有帮助。
我的目标是设计一个布局,在充满文本行的 texview 顶部显示图像。
两者都必须匹配其父容器的宽度。
问题是imageview的宽度取决于我无法提前知道的屏幕宽度。
在 Android 文档中,dip 的概念是核心,但毕竟,它只是一种使图像的 real 大小在每种情况下都相同的方法,它有与屏幕尺寸无关。
我该如何继续?
1)在 res 文件夹中放入一张足够大的图像以调整大小(即缩小)。希望这不会产生工件或不需要一些资源
2) 1. 的一些变体,图像在不同的文件夹中
3)为每个屏幕尺寸和旋转创建一个图像(如果可能保存在某个地方),第一次是必要的
4) 其他解决方案
你的帮助不仅可以优化这个布局,还可以让我理解基于dip设计布局背后的原理,很多情况下我无法理解。
使用以下代码动态查找屏幕的宽度和高度,并根据需要将其设置为ImageView。
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,height);
imageview.setLayoutParams(params);
你是对的 "every screen is different." 将图像放入每个 res
文件夹中只会处理屏幕密度的一般情况 - 而不是实际屏幕尺寸。
拥有一个包含所有可能图像尺寸的文件夹可能会变得非常大(不是针对所有图像,而是针对高质量的复杂图像)。
您应该有 1 张图像能够满足所有屏幕尺寸所需的图像质量(例如,甚至可以放大到 xxxdpi,但令人满意)。然后使用屏幕尺寸计算和 BitmapFactory
缩放来调整。您还需要正确管理内存,尤其是在较旧、较小的设备上。
编辑:
Android 有各种各样的资源来帮助您管理 IP、图像资产、图形等。如果您有一个庞大的团队、数百个图像资产并且有常见的用例(按钮、微调器) 、图标等),然后使用资源文件夹帮助您的团队将事情组织得井井有条。如果您制作游戏并不断创建、显示和调整图像资产的大小,那么资源文件夹解决方案可能并不理想,或者可能导致 APK 臃肿。此外,对于不同的密度屏幕,您可能希望使用不同的 resources/graphic 文件但不想编写大量代码来管理它,因此 Android 提供了内置工具来提供帮助。
请注意,Android 解决了一个非常长的 Drawable
类型列表 (http://developer.android.com/guide/topics/resources/drawable-resource.html),以满足各种应用程序图形需求 - 动画、mipmap、9-patch...
在您的情况下,您询问的是要以特定方式显示的单个图像。欢迎您使用资源文件夹(因为它们可用)来实现此目标,但由于您听起来像一个需要以特定方式显示单个图像的小团队,您最好只提供单个图像,询问屏幕的大小并显示它。 phone 也会定期重新计算并重新显示来自 Android 提供的资源文件中的相同图像。通过将它们用于单个图像,您并不是真正的 "saving" 时间、CPU 周期或任何其他东西。
我很难弄清楚 Android 指南如何(以及是否)对我想要的东西有帮助。
我的目标是设计一个布局,在充满文本行的 texview 顶部显示图像。
两者都必须匹配其父容器的宽度。
问题是imageview的宽度取决于我无法提前知道的屏幕宽度。
在 Android 文档中,dip 的概念是核心,但毕竟,它只是一种使图像的 real 大小在每种情况下都相同的方法,它有与屏幕尺寸无关。
我该如何继续?
1)在 res 文件夹中放入一张足够大的图像以调整大小(即缩小)。希望这不会产生工件或不需要一些资源
2) 1. 的一些变体,图像在不同的文件夹中
3)为每个屏幕尺寸和旋转创建一个图像(如果可能保存在某个地方),第一次是必要的
4) 其他解决方案
你的帮助不仅可以优化这个布局,还可以让我理解基于dip设计布局背后的原理,很多情况下我无法理解。
使用以下代码动态查找屏幕的宽度和高度,并根据需要将其设置为ImageView。
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,height);
imageview.setLayoutParams(params);
你是对的 "every screen is different." 将图像放入每个 res
文件夹中只会处理屏幕密度的一般情况 - 而不是实际屏幕尺寸。
拥有一个包含所有可能图像尺寸的文件夹可能会变得非常大(不是针对所有图像,而是针对高质量的复杂图像)。
您应该有 1 张图像能够满足所有屏幕尺寸所需的图像质量(例如,甚至可以放大到 xxxdpi,但令人满意)。然后使用屏幕尺寸计算和 BitmapFactory
缩放来调整。您还需要正确管理内存,尤其是在较旧、较小的设备上。
编辑:
Android 有各种各样的资源来帮助您管理 IP、图像资产、图形等。如果您有一个庞大的团队、数百个图像资产并且有常见的用例(按钮、微调器) 、图标等),然后使用资源文件夹帮助您的团队将事情组织得井井有条。如果您制作游戏并不断创建、显示和调整图像资产的大小,那么资源文件夹解决方案可能并不理想,或者可能导致 APK 臃肿。此外,对于不同的密度屏幕,您可能希望使用不同的 resources/graphic 文件但不想编写大量代码来管理它,因此 Android 提供了内置工具来提供帮助。
请注意,Android 解决了一个非常长的 Drawable
类型列表 (http://developer.android.com/guide/topics/resources/drawable-resource.html),以满足各种应用程序图形需求 - 动画、mipmap、9-patch...
在您的情况下,您询问的是要以特定方式显示的单个图像。欢迎您使用资源文件夹(因为它们可用)来实现此目标,但由于您听起来像一个需要以特定方式显示单个图像的小团队,您最好只提供单个图像,询问屏幕的大小并显示它。 phone 也会定期重新计算并重新显示来自 Android 提供的资源文件中的相同图像。通过将它们用于单个图像,您并不是真正的 "saving" 时间、CPU 周期或任何其他东西。