Rey*_*deh 10 pixel pixels xamarin.android density-independent-pixel xamarin
我想在xamarin.android的C#代码中将dp转换为px ,但我能找到的只是android studio 中的java代码,在xamarin中有一些问题.我尝试使用类似于使用Resources而不是getResources(),我可以解决一些小问题,但是还有一些问题我找不到它们的任何等价物.这里是xamarin中的原始代码,我的代码和我的代码问题:
(从以编程方式将LayoutParams上的高度设置为与密度无关的像素)
java代码
int height = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
C#代码
int height = (int)TypedValue.ApplyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, Resources.DisplayMetrics);
Run Code Online (Sandbox Code Playgroud)
问题:
'TypedValue'不包含'COMPLEX_UNIT_DIP'的定义
无效的表达式术语<(>的相同错误)
当前上下文中不存在名称"HEIGHT"
(从公式px找到dp,dp到px android)
java代码
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
Run Code Online (Sandbox Code Playgroud)
C#代码
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
int pixel = Math.Round(dp * (displayMetrics.Xdpi / DisplayMetrics.DensityDefault));
Run Code Online (Sandbox Code Playgroud)
问题
现在我实际上有两个问题.哪个代码更合适?在xamarin.android中它们的等效代码是什么?
提前致谢.
Ste*_*ord 13
解决"第一代码":
Xamarin倾向于将常量移动到自己的枚举中.COMPLEX_UNIT_DIP可以在ComplexUnitType枚举中找到.此外,您不能在代码中使用<HEIGHT>来实际传递dips以获得等效的像素值.在下面的示例中,我得到100个像素的像素.
var dp = 100;
int pixel = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, Context.Resources.DisplayMetrics);
Run Code Online (Sandbox Code Playgroud)
解决"第二代码":
你需要显式地将'DisplayMetrics.DensityDefault'转换为float并将整个转换为int:
int pixel = (int)System.Math.Round(dp * (displayMetrics.Xdpi / (float)DisplayMetrics.DensityDefault));
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一种方法,因为第二种代码专门用于计算"x维度":根据Android docs和Xamarin.Android docs,Xdpi属性是
"X维度中每英寸屏幕的确切物理像素数."
这些来自我目前正在进行的项目..
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8474 次 |
| 最近记录: |