我想在 xamarin.android 中的 C#代码中将dp转换为px,但我能找到的只是 java code 在android中工作室在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'的定义
无效的表达式术语&lt; (&gt;的相同错误)
当前上下文中不存在名称“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));
问题
现在我实际上有两个问题。哪个代码更合适?在xamarin.android中它们的等效代码是什么?
提前致谢。
答案 0 :(得分:13)
解决“第一个代码”:
Xamarin倾向于将常量移动到自己的枚举中。 COMPLEX_UNIT_DIP可以在ComplexUnitType枚举中找到。你也不能拥有&lt;高度&gt;在你的代码中,你实际上需要传入dips来获得等效的像素值。在下面的示例中,我得到100个像素的像素。var dp = 100;
int pixel = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, Context.Resources.DisplayMetrics);
解决“第二代码”:
你需要显式地将'DisplayMetrics.DensityDefault'转换为浮点数并将整个回合转换为int:
int pixel = (int)System.Math.Round(dp * (displayMetrics.Xdpi / (float)DisplayMetrics.DensityDefault));
我更喜欢第一种方法,因为第二种代码专门用于沿“x维度”计算: 根据Android文档和Xamarin.Android文档,Xdpi属性为
“X维度中每英寸屏幕的确切物理像素数。”
答案 1 :(得分:5)
这些来自我目前正在进行的项目..
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;
}
答案 2 :(得分:0)
dp到px:
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
int pixel = Math.Round((dp * DisplayMetrics.DensityDefault) + 0.5);
从这里回答:https://stackoverflow.com/a/8490361/6949388
对不起,没有足够的代表发表评论。
答案 3 :(得分:0)
来自android源代码textview settextsize
var convertToDp = TypedValue.ApplyDimension( ComplexUnitType.Dip, size, context.Resouces.DisplayMetrics);