Как преобразовать dp в px в xamarin.андроид?
Я хочу преобразовать dp в px в моем C# код на в Xamarin.android, но все, что я смог найти java коды в Android studio это есть некоторые проблемы в Xamarin. Я попытался использовать эквивалент, как использование ресурсов вместо getResources (), и я мог бы решить некоторые небольшие проблемы, но есть некоторые проблемы, которые я не смог найти для них эквивалента. вот оригинальные коды, мои коды и мои проблемы с кодами в в Xamarin:
первый код
(нашли от программно установите высоту на LayoutParams как независимые от плотности пиксели)
код 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'
недопустимый термин выражения )
имя "высота" не существует в текущем контексте
код
(нашли от Формула px для dp, dp для 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));
3 ответов
решение "первый код":
Xamarin имеет тенденцию перемещать константы в свои собственные перечисления. COMPLEX_UNIT_DIP можно найти в перечислении ComplexUnitType. Также вы не можете иметь в коде, который вам действительно нужно передать в провалах, чтобы получить эквивалентное значение пикселя. в приведенном ниже примере я получаю пиксели в 100 провалах.
var dp = 100;
int pixel = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, Context.Resources.DisplayMetrics);
решение "второй код":
вам нужно явно бросить ' DisplayMetrics.DensityDefault на float и весь раунд до int:
int pixel = (int)System.Math.Round(dp * (displayMetrics.Xdpi / (float)DisplayMetrics.DensityDefault));
Я предпочитаю первый подход, поскольку второй код специально предназначен для вычисления вдоль " измерения 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;
}
dp к px:
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
int pixel = Math.Round((dp * DisplayMetrics.DensityDefault) + 0.5);
ответ взят отсюда:https://stackoverflow.com/a/8490361/6949388
извините, недостаточно репутации для комментариев.