Использует ли setWidth (int pixels) dip или px?

Использует ли setWidth (int pixels) автономный пиксель устройства или физический пиксель как единое целое? Например, setWidth (100) устанавливает ширину представления равным 100 опускам или 100 пикселей?

Спасибо.

Ответ 1

Он использует пиксели, но я уверен, что вам интересно, как использовать провалы вместо этого. Ответ находится в TypedValue.applyDimension(). Вот пример того, как преобразовать провалы в px в коде:

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));

Ответ 2

Правильный способ получить постоянное количество DIP в коде - создать XML файл ресурсов, содержащий значения dp, немного похожие:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

Затем обратитесь к ресурсу вашего кода следующим образом:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

Поплавок, который вы вернули, будет соответствующим образом масштабироваться для плотности пикселей устройства, поэтому вам не нужно сохранять репликацию метода конверсии во всем приложении.

Ответ 3

Метод setWidth (100), установите 100 px как ширину (не в dp). Таким образом, вы можете столкнуться с разными проблемами на разных телефонах Android. Используйте измерение в dp вместо пикселей. Используйте приведенный ниже код, чтобы получить измерение в dp ширина выборки = 300 пикселей и высота = 400 пикселей.

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());

Ответ 5

Пиксели, конечно, метод запрашивает пиксели в качестве параметра.

Ответ 6

Исходя из приведенных выше ответов, которые мне подходят, я генерирую несколько вспомогательных методов, просто добавьте их в свои утилиты, чтобы использовать их во всем проекте.

   // value in DP
   public static int getValueInDP(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInDP(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    // value in PX
    public static int getValueInPixel(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInPixel(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }