【问题标题】:Understanding android dimensions了解安卓尺寸
【发布时间】:2013-02-18 12:47:49
【问题描述】:

我有两台设备,Desire HD(217dpi,4,3")和 Nexus 7(216dpi,7")。我实际上正在构建菜单并对尺寸感到疯狂。我一般使用 dp(与密度无关的像素)。

我们的设计师希望选项比默认选项大一点,所以我在 ListView 项目的底部添加了一个 android:minHeight="100dp"。但它在平板电脑和手机上看起来非常不同。这是我将平板电脑屏幕截图调整为 62% 的屏幕截图,因此两个屏幕截图的高度相同。

但是,这两个选项的高度都是 100dp,但正如您所看到的,表格上的间隙非常不同,它们大约为 0.5/1/0.5,看起来不错,但在移动设备上,这是 1/1/1,看起来很糟糕。我不明白为什么会这样。

我还有一个计数器,您可以在黄色框中看到两者都是 100% 缩放的,平板电脑会形成一个带有圆边的矩形,而在移动设备上它更像是一个圆形。两者都使用相同的形状xml:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:width="2dp"
            android:color="#fff" />
    <solid android:color="#f00" />
    <padding android:left="4dp"
             android:top="2dp"
             android:right="4dp"
             android:bottom="2dp" /> 
    <corners
        android:bottomRightRadius="10dp"
        android:bottomLeftRadius="10dp" 
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" /> 
</shape>

为什么这些图片看起来如此不同?我试图比较几乎相同的 dpi 值。我认为这两种设备都具有密度 hdpi。所以我不能使用基于 dpi 的单独值文件,我可以使用大前缀,但我不确定这在更大的平板电脑上会是什么样子。

【问题讨论】:

  • 你的 textSize 值是多少?
  • 我没有设置我正在使用android:textAppearance="?android:attr/textAppearanceLarge"
  • 尝试使用sp作为维度,看看是否还会出现这种差异,可能手机和平板电脑上的“Large”不一样?
  • 我试过 17sp。没有重大变化。

标签: android dimensions dpi


【解决方案1】:

出现这种情况是因为两台设备的 DPI 相同,但像素和屏幕尺寸(以英寸为单位)不同。 对于 Android,两者都是 HDPI(因为 216-217dpi)。您可以通过以下方式解决此问题:

  1. 为 nexus 7 或 7" 平板电脑创建专用布局。
  2. 为 nexus 7 创建专用样式,例如 values-sw600dp/styles.xml
  3. 调整布局以添加更大的尺寸。

我认为“Google 解决方案”将是为平板电脑创建不同的布局,因为您拥有更多空间和屏幕。检查 Gmail 或 Google Play 应用程序。

基本上,如果您的应用需要在平板电脑上正常运行,您必须为布局和值添加两个新文件夹:

  1. layout-sw600dp ---> nexus 7 或 7" 平板电脑
  2. layout-sw720dp ---> nexus 10 或 10" 平板电脑

希望有帮助!!

【讨论】:

【解决方案2】:

使用 this 在代码中手动设置列表视图的高度

  int height= getResources().getDisplayMetrics().density * 100;

【讨论】:

  • 嗯,这是一个选项,但我更喜欢 xml 中的内容。无论如何,这并不能解决关于通知的第二个问题(黄色框)。
  • 我认为这与用户定义的字体缩放(设置 -> 显示 -> 字体大小)有关。似乎解决方案是使用SP代替DP。
【解决方案3】:

我找到了这种行为的原因。这是该设备上的字体大小设置。它被设置为 Huge,因此所有具有单位 SP 的维度都以 1.5 倍数播放。您可以通过设置 -> 显示 -> 字体大小在设置中检查您的设备。

正如我在this answer 中所写,您可以通过这行简单的代码获得比例因子:

float scale = getResources().getConfiguration().fontScale;

我的解决方案是使用该比例因子或不将 SPDP 混合。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多