我正在使用此代码添加一个布局,该布局在标记顶部显示有关标记的信息。虽然我在此代码中使用代码将像素转换为 dpi。但它不会在不同的 dpi 相同的视图中查看。
protected override bool OnTap (int index)
{
if (!ShowPropertyFlag) {
if (mapview .ChildCount > 0) {
mapview .RemoveViewAt (0);
}
if (_items [index].Snippet == Boolean .FalseString) {
InformationLayout iWindow = new InformationLayout
(mapview .Context, _Properties [_items [index].Title], sayActivity);
GeoPoint p = _items [index].Point;
MapView.LayoutParams _params = new MapView.LayoutParams
(WindowManagerLayoutParams .WrapContent,
WindowManagerLayoutParams.WrapContent
, p,-(int) Common .convertPixelsToDp (13,sayActivity ),-(int) Common .convertPixelsToDp (25,sayActivity ),
MapView .LayoutParams .Bottom );
_params.Mode = MapView .LayoutParams .ModeMap;
iWindow .Visibility = ViewStates .Visible;
mapview .AddView (iWindow, _params);
mapview .HasIWindows =true ;
} else {
Property[] m = _SubProperties [_items [index].Title];
List <Property > templist= m.OfType <Property > () .ToList ();
sayActivity .ListShow (templist ,m.Length );
}
}
return base.OnTap (index);
}
这是我Common .convertPixelsToDp
用于将 Pixel 转换为 Dp的代码
public static float convertPixelsToDp (float px, Context context)
{
return px / ((float)context.Resources.DisplayMetrics.DensityDpi / 160f);
}
我的标记宽度 x 高度是:25 x 45
因为我是新用户,所以我不能以不同的 dpi 发布我的信息窗口和标记的图像。但我解释一下。在 ldpi 中它看起来不错并且处于良好状态(我通过尝试不同的数字来修复它,最后在 13 和 25 时它得到修复)但是在 hdpi 中,信息窗口看起来是关于标记的中心而不是标记的顶部。我不明白为什么?虽然我使用像素到 dp 转换器。
编辑:
也许这些链接有助于查看不同 dpi 的图像:
hdpi:http: //i.stack.imgur.com/K8vjO.png
ldpi:http: //i.stack.imgur.com/sLH5o.png