我正在努力使用自定义控件并让它在不同的设备上正确呈现。我有一张地图(一张州的地图),我正在屏幕上呈现。
我的抽签看起来像这样:
的可绘制
绘制,sw320dp
drawable-sw360dp
问题是,我有两部手机可以访问(我的三星Galaxy 6和我妻子的Sony XPeria Compact)。
2个非常不同的手机。他们都使用我放在360文件夹中的地图。 但这张地图对索尼来说太大了。即使我将360降至350,两部手机都使用350文件夹。
关于手机的更多统计数据:
的三星
像素宽度:1440
像素高度:2560
Dp的宽度:360
Dp中的高度:640
索尼
像素宽度:720
像素高度:1184
Dp的宽度:360
Dp的高度:592
如何构建我的可绘制文件夹,以便索尼使用较小的地图png?
答案 0 :(得分:2)
我会使用配置限定符,构建像这样的Resources
文件夹并定义每个配置文件夹:
用于低密度(ldpi)屏幕的drawable-ldpi Resources文件夹(~120dpi) drawable-mdpi用于中密度(mdpi)屏幕的资源文件夹(~160dpi)。 (这是 基线密度。)
drawable-hdpi用于高密度(hdpi)屏幕的资源文件夹(~240dpi)。
drawable-xhdpi用于超高密度(xhdpi)屏幕的资源文件夹(~320dpi)。
drawable-xxhdpi资源文件夹,用于超高密度(xxhdpi)屏幕(~480dpi)。
drawable-xxxhdpi用于额外超高密度(xxxhdpi)的资源文件夹使用(~640dpi)。
请记住,这些配置之间的资产比率为:
ldpi | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1 | 1.5 | 2 | 3 | 4
答案 1 :(得分:1)
如何构建我的可绘制文件夹,以便索尼使用较小的地图png?
是的,你需要一张较小的索尼地图图片和一张较大的三星地图。
您可以使用export const rehydrateEpic = (
action$: ActionsObservable
) =>
action$.ofType(REHYDRATE)
// Wait for the JWT token to be successfully fetched.
.zip(() => action$.ofType(GET_JWT_SUCCESS))
.switchMap(() => {
return action$.ofType([
actions.GET_ACCOUNT_INFO_SUCCESS,
actions.GET_ACCOUNT_INFO_FAILURE,
])
.do(action => {
// ...but this one is never reached :(
console.log(action)
})
.startWith(actions.getAccountInfo())
})
和Resources.DisplayMetrics.Ydpi
在两部手机中获取Resources.DisplayMetrics.Xdpi
的值。并参考@ hichame.yessou的答案中的引用,选择放置较大地图的文件夹,放置较小地图的文件夹。
如果您没有两张图片,可以通过编程方式自适应UI,请参阅TypedValue.applyDimension