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;
}
}
}