Android – Nexus 7和Kindle Fire HD,认为是不同的

我正在开发面向平板电脑7英寸Kindle Fire HD和Nexus 7的应用程序.
这两个应用程序的大小和屏幕分辨率相同.但是,我运行我的应用程序,这是非常不同的.为什么?

似乎这是因为nexus 7被检测为TVDPI,而Kindle Fire HD是HDPI.
如何根据1280 * 800型号进行相同的渲染?

谢谢

嗯,好像你已经发现为什么两者有差异,这是因为它们报告不同的密度比例因子:

> Nexus 7:TVDPI:比例因子= 1.333
> Kindle Fire HD:HDPI:比例因子= 1.5

那么为什么他们在技术上具有相同的物理尺寸和分辨率时报告不同?

CORE问题实际上是存在的,因为一个设备是Google Play设备(Nexus),而另一个则不是(Kindle).所有拥有Google Play(和其他Google应用程式)的Android装置只能透过传递「兼容性测试套件(CTS)」来验证这类设定是否符合所提供的标准.标准本身记录在每个版本的兼容性定义文档(CDD)中. Here is a link to the CDD for Android 4.0(第7.1节涉及屏幕尺寸和密度). CDD告诉设备制造商,他们应该报告数字上最接近屏幕实际DPI的比例因子,这在这种情况下实际上是TVDPI.

Amazon设备不会使用任何Google应用,包括Google Play.遵循相同的标准符合他们的最佳利益,他们不受他们的约束,而且经常没有遵循.当Nexus 7出现时,TVDPI会在每个人身上sn,一息,但如果在设计过程中引用了CDD,亚马逊就会知道这一点.

这怎么会导致他们的行为不同?

差异不在您的布局选择.显然,从您的屏幕截图两个设备正在按照您期望的方式拾取正确的布局.更改布局目录中的sw值仅影响哪些设备将选择该布局…它不会更改任何有关如何扩展的内容.不要试图将布局本身放在密度特定目录中…布局应该是灵活的.

相反,问题在于在与密度无关的像素单元(即dip或dp)上进行的任何维度或大小计算,例如文本大小,您可能创建的任何固定视图大小和可绘制的大小.

由于这两个设备选择了不同的资产来缩放资产,您使用的任何可绘制资源或您在“dp”中定义的任何值都将导致一个小的变化.让我给你两个例子:

您将TextView的文本大小定义为16dp.在Nexus 7上,这将画出21px的文字. Kindle Fire HD将以24px绘制相同的文字.差异很小…但它存在.

对于可绘制的图像也是如此.如果您只是在48×48的drawable-mdpi中定义了一个图像,并且在72×72的drawable-hdpi中定义了一个图像,那么Kindle可以直接使用72像素的图像,而Nexus将创建一个尺寸为64像素的图像,因此有8个像素两资产之间.

我可以做些什么来使两者看起来更相似?

在大多数情况下,我会说你不应该.通常,完成的缩放不会很大程度上影响应用程序的结果,除非布局的约束被设置为太多的硬编码大小.

然而,一般来说,如果您需要为此目的特定更改UI的部分内容,解决方案是定义特定的资源和尺寸,以便您觉得需要使用-tvdpi(再次,我不会推荐缩放)一切都在您的应用程序中满足这种情况).

对于诸如文本或视图大小的内容,这意味着您可能需要一个values-tvdpi / dimensions.xml文件和一个默认值/ dimensions.xml文件.使用上述示例,您可以将默认文本大小定义为16dp,但在-tvdpi位置中,定义与18dp相同的维度.这将导致两个设备将最终文本缩放到24像素.在您的代码中,使用实际维度,直接将其引用为@ dimen / myTextSize而不是16dp.

对于可绘制的项目,添加一个drawable-tvdpi目录,并缩放这些资源,使其符合您在Nexus 7等设备上的绘制方式.再次使用我们前面的示例,将相同的图像文件从drawable-hdpi文件夹复制到drawable- tvdpi文件夹,所以两个设备将绘制相同的图像在72px.

为避免在多个地方复制同一资产,您也可以使用别名进行此操作.将图像本身绘制成可绘制的特殊名称,并使用values-tvdpi / drawables.xml和values-hdpi / drawables.xml在两个位置引用单个资产.有关别名的更多信息,see this documentation.这些示例用于布局,但是通过更改为type =“drawable”,相同的范例可用于可绘制(或任何资源).

http://stackoverflow.com/questions/13156157/nexus-7-and-kindle-fire-hd-think-different

转载注明原文:Android – Nexus 7和Kindle Fire HD,认为是不同的