using Android.Content; using Android.Util; // ReSharper disable once CheckNamespace namespace System { /// /// UI尺寸单位转换 /// public static class DimenUnitConverterExtensions { const NumberToInt32Format Format = NumberToInt32Format.RoundAwayFromZero; /// /// 将[传入的单位值]与[传入的单位类型]转换为[px(像素)值] /// /// /// /// /// static float ToPx(this Context context, float value, ComplexUnitType unit) { var result = TypedValue.ApplyDimension( unit, value, context.Resources?.DisplayMetrics); return result; } /// static int ToPxInt32(this Context context, float value, ComplexUnitType unit, NumberToInt32Format format = Format) { var result = ToPx(context, value, unit).ToInt32(format); return result; } /// /// 将[px(像素)值]转换为[dp值] /// /// /// /// public static float PxToDp(this Context context, float value) { var density = context.Resources?.DisplayMetrics?.Density; if (!density.HasValue) throw new ArgumentNullException(nameof(density)); return value / density.Value; } /// /// 将[dp值]转换为[px(像素)值] /// /// /// /// public static float DpToPx(this Context context, float value) { var result = ToPx(context, value, ComplexUnitType.Dip); return result; } /// public static int DpToPxInt32(this Context context, float value, NumberToInt32Format format = Format) { var result = ToPxInt32(context, value, ComplexUnitType.Dip, format); return result; } /// /// 将[sp值]转换为[px(像素)值] /// /// /// /// public static float SpToPx(this Context context, float value) { var result = ToPx(context, value, ComplexUnitType.Sp); return result; } /// public static int SpToPxInt32(this Context context, float value, NumberToInt32Format format = Format) { var result = ToPxInt32(context, value, ComplexUnitType.Sp, format); return result; } } }