Android支持多个屏幕并标准化UI,dp规模在某些屏幕上有所不同

时间:2018-02-20 19:51:48

标签: java android constraints dpi screen-density

我们正在开发一个Android应用程序,我们遇到了一个问题,即同一密度桶中的设备,即“xxhdpi”看起来并不一样,即Pixel和Pixel 2.我们有一个非常重要的UI图像并使用约束视图来组织多个重叠图像的放置。其中一些屏幕顶部的导航抽屉进一步加剧了问题,因为相同屏幕尺寸上的边距较厚,密度不同,应用程序的其余部分被挤压成较小的框架。

下面举例说明Pixel和Pixel 2的呈现方式有多么不同: Pixel 2 vs. Pixel

我们尝试制作更具体的布局以匹配更具体的DPI范围,但无论我们尝试什么,模拟器都将相同的设备组合在一起。 These are the layout categories we've tried, where sw320dp for example refers to a minimum screen width

有没有办法通过约束视图功能(如约束锚点或百分比约束)来解决此问题?或者,我们可以更简单地定义我们的布局类别,或者对类似设备的dp规模做一些不一样的事情吗?我们已经查阅了此页面以及大量堆栈溢出帖子:Android's Guide on Supporting Multiple Screen Sizes

欢迎任何建议,评论或具体问题,提前感谢任何花时间阅读此内容的人。

1 个答案:

答案 0 :(得分:0)

这是我的方法,让图像完全显示而不会在边缘裁剪,希望你从中得到某种想法来解决你的情况。

问题在于wrap_content和match_parent,尽管像素和像素2属于“xxhdpi”相同的类别,用于从密度桶中获取图像,但它们的宽度变化很小,像素:143.8 x 69.5 x 8.5 mm (5.66 x 2.74 x 0.33英寸)和pixel2:145.7 x 69.7 x 7.8 mm(5.7 x 2.7 x 0.31英寸)

所以我猜你可能有宽度和图像比例类型的匹配父作为中心裁剪,因此图像缩放相应地放大,所以因为它们具有不同的宽度,所以它们相对于另一个放大了。

我有类似的情况所以我所做的是使用webview与匹配父作为宽度和包装内容作为高度然后我在webview中显示图像

        WebSettings settings = webView.getSettings();
        settings.setLoadWithOverviewMode(true);

这里setLoadWithOverviewMode实际上缩小并适合图像,所以无论你总是看到整个图像。