如何将xamarin.android中的dp转换为px?
How to convert dp to px in xamarin.android?
我想在 xamarin.android 中的 C# 代码 中将 dp 转换为 px,但我只能找到 java android studio 中的代码 在 xamarin 中存在一些问题。我尝试使用等效项,例如使用 Resources 而不是 getResources() ,我可以解决一些小问题,但还有一些问题我找不到它们的等效项。这是原始代码、我的代码和我在 xamarin 中的代码问题:
第一个密码
(从 Programatically set height on LayoutParams as density-independent pixels 中找到)
java代码
int height = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, getResources().getDisplayMetrics());
C#代码
int height = (int)TypedValue.ApplyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, Resources.DisplayMetrics);
问题:
'TypedValue' 不包含 'COMPLEX_UNIT_DIP'
的定义
无效的表达式术语 <(> 的相同错误)
名称'HEIGHT'在当前上下文中不存在
第二个密码
(从 Formula px to dp, dp to px android 中找到)
java代码
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
C#代码
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
int pixel = Math.Round(dp * (displayMetrics.Xdpi / DisplayMetrics.DensityDefault));
问题
- 运算符“/”不能应用于 'float' 和 'DisplayMetricsDensity'
类型的操作数
现在我实际上有两个问题。哪个代码更合适? xamarin.android 中它们的等效代码是什么?
提前致谢。
dp 转 px:
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
double pixel = Math.Round((dp * DisplayMetrics.DensityDefault) + 0.5);
答案取自此处:
抱歉,没有足够的代表发表评论。
"First code"的解决方案:
Xamarin 倾向于将常量移动到它们自己的枚举中。 COMPLEX_UNIT_DIP 可以在 ComplexUnitType 枚举上找到。此外,您的代码中不能有 < HEIGHT >,您实际上需要传入 dips 以获得等效的像素值。在下面的例子中,我得到了 100 个倾斜的像素。
var dp = 100;
int pixel = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, Context.Resources.DisplayMetrics);
"Second code"的解决方法:
您需要将 'DisplayMetrics.DensityDefault' 显式转换为浮点数,并将整轮转换为整数:
int pixel = (int)System.Math.Round(dp * (displayMetrics.Xdpi / (float)DisplayMetrics.DensityDefault));
我更喜欢第一种方法,因为第二种代码专门用于计算"x dimension":
根据 Android 文档和 Xamarin.Android 文档,Xdpi 属性 是
"The exact physical pixels per inch of the screen in the X dimension."
这些来自我目前正在进行的项目..
public static float pxFromDp(Context context, float dp)
{
return dp * context.Resources.DisplayMetrics.Density;
}
public static float dpFromPx(Context context, float px)
{
return px / context.Resources.DisplayMetrics.Density;
}
来自android源代码textview settextsize
var convertToDp = TypedValue.ApplyDimension( ComplexUnitType.Dip, size, context.Resouces.DisplayMetrics);
我想在 xamarin.android 中的 C# 代码 中将 dp 转换为 px,但我只能找到 java android studio 中的代码 在 xamarin 中存在一些问题。我尝试使用等效项,例如使用 Resources 而不是 getResources() ,我可以解决一些小问题,但还有一些问题我找不到它们的等效项。这是原始代码、我的代码和我在 xamarin 中的代码问题:
第一个密码
(从 Programatically set height on LayoutParams as density-independent pixels 中找到)
java代码
int height = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, getResources().getDisplayMetrics());
C#代码
int height = (int)TypedValue.ApplyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, Resources.DisplayMetrics);
问题:
'TypedValue' 不包含 'COMPLEX_UNIT_DIP'
的定义无效的表达式术语 <(> 的相同错误)
名称'HEIGHT'在当前上下文中不存在
第二个密码
(从 Formula px to dp, dp to px android 中找到)
java代码
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
C#代码
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
int pixel = Math.Round(dp * (displayMetrics.Xdpi / DisplayMetrics.DensityDefault));
问题
- 运算符“/”不能应用于 'float' 和 'DisplayMetricsDensity' 类型的操作数
现在我实际上有两个问题。哪个代码更合适? xamarin.android 中它们的等效代码是什么?
提前致谢。
dp 转 px:
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
double pixel = Math.Round((dp * DisplayMetrics.DensityDefault) + 0.5);
答案取自此处:
抱歉,没有足够的代表发表评论。
"First code"的解决方案:
Xamarin 倾向于将常量移动到它们自己的枚举中。 COMPLEX_UNIT_DIP 可以在 ComplexUnitType 枚举上找到。此外,您的代码中不能有 < HEIGHT >,您实际上需要传入 dips 以获得等效的像素值。在下面的例子中,我得到了 100 个倾斜的像素。
var dp = 100;
int pixel = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, Context.Resources.DisplayMetrics);
"Second code"的解决方法:
您需要将 'DisplayMetrics.DensityDefault' 显式转换为浮点数,并将整轮转换为整数:
int pixel = (int)System.Math.Round(dp * (displayMetrics.Xdpi / (float)DisplayMetrics.DensityDefault));
我更喜欢第一种方法,因为第二种代码专门用于计算"x dimension": 根据 Android 文档和 Xamarin.Android 文档,Xdpi 属性 是
"The exact physical pixels per inch of the screen in the X dimension."
这些来自我目前正在进行的项目..
public static float pxFromDp(Context context, float dp)
{
return dp * context.Resources.DisplayMetrics.Density;
}
public static float dpFromPx(Context context, float px)
{
return px / context.Resources.DisplayMetrics.Density;
}
来自android源代码textview settextsize
var convertToDp = TypedValue.ApplyDimension( ComplexUnitType.Dip, size, context.Resouces.DisplayMetrics);