多个设备密度和Xamarin Android

时间:2018-01-28 01:18:06

标签: android xamarin xamarin.android

我正在努力使用自定义控件并让它在不同的设备上正确呈现。我有一张地图(一张州的地图),我正在屏幕上呈现。

我的抽签看起来像这样:
可绘制
绘制,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?

2 个答案:

答案 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)

You can refer to this

  

如何构建我的可绘制文件夹,以便索尼使用较小的地图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