Nexus 7平板电脑的填充问题

7

我注意到在运行 Android 4.1 的 Nexus 7 平板电脑上存在一些有关填充的问题。具体来说,我有一个带有填充的背景可绘制对象,它创建了一个外边框:

  <?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >

  <stroke
    android:width="1dp"
    android:color="#59000000" />

  <padding
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp"
    android:top="1dp" />

  </shape>

此外,还需要添加1dp的白色内描边。因此,整个图像周围应该是一个2dp的正方形边框:

我已在实际的 Nexus 设备以及其他几个设备和 7 英寸果冻豆模拟器上测试过:

首先,这是在 4.1 7英寸模拟器上的工作版本: 这是用于 4.1 的 7 英寸平板模拟器

外部的边框是均匀的,并且绕着整个图像。 在我拥有的所有其他设备上也是如此运行的。

Nexus 7:

填充混乱的图像

灰色是背景颜色,但是可以看到右侧和底部填充没有被尊重。 边框现在被图像遮挡了。

如果有关系的话,这些是 GridView 的子项。 想知道是否有人看到这些问题或者有解决方法。


我不禁想到这可能是由于缩放引起的,尽管使用XML drawable我认为它不应该有影响...虽然有点牵强,但这个drawable在哪个文件夹里?Nexus 7是tvdpi而不是mdpi,所以我倾向于认为这与此有关。 - Kevin Coppock
我根本不知道tvdpi的存在。我目前将其放置在drawable-nodpi中,因为我认为它是在xml中定义而无需缩放的。我只是困惑为什么它能在模拟器上运行而不能在设备上运行。 - Nick Campion
是的,即使Google也建议不要为Nexus 7担心tvdpi,但这明显是一个缩放问题。尝试将模拟器设置为213 dpi(tvdpi密度),看看是否出现问题。 - Kevin Coppock
这是默认设置的Built-in WXGA800-7in选项。嗯,现在看来这似乎是一个特定于设备的问题了。 - Nick Campion
这是一个渲染问题,将在未来的版本中修复。感谢您的报告,很抱歉。请注意,这不是缩放问题。问题在于如何使用硬件加速渲染描边矩形。 - Romain Guy
1个回答

2
这似乎是在生成XML可绘制对象中的stroke时出现了一个错误。经过多次尝试,我将其缩小到:它似乎在形状的下部和右侧不正确地制作描边大小,即使以像素为单位指定。如果我只是将描边宽度改为2dip而不是1dip(其他所有内容保持不变),则会得到这样的结果:

enter image description here

这是我用于后图像背景的border.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="#59000000"/>

    <padding
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp"
            android:top="1dp"/>

</shape>

再次强调,这只是你的描边宽度加粗而已。好处是,这不会改变预期结果,因为填充保持不变。事实上,您可以将stroke标签更改为solid,并仍然获得相同的结果(但是,如果您的图像包含透明度,则在透明区域中会看到实心背景)。
试试这个方法,告诉我它对你有用吗!

这对我起作用了,为什么它能起作用令人困惑 :) 但它确实起作用了,谢谢! - Nick Campion
不用客气 :) 我很高兴它管用了,但我也希望我知道为什么。 - Kevin Coppock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接