Какую единицу измерения использует LayoutParams?

pI работает с линейным расположением и хочу установить максимальную высоту представления. В "обычных" обстоятельствах я хочу, чтобы представление использовало "wrap_content". Однако иногда обстоятельства могут подтолкнуть макет к нежелательному размеру. Когда это произойдет, я хочу ограничить высоту до 300dp.

Я установил размер представления, используя следующее, когда список в макете превышает 4 элемента списка:

LinearLayout listLayout = (LinearLayout) dialog.findViewById(R.id.listLayout);
if(list.size() > 4){
    LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300);                           
    listLayout.setLayoutParams(params);
}

Рассмотрение документации оставляет меня без подсказки относительно применяемой единицы измерения. Каковы единицы измерения в этой ситуации (dp, sp, px,...)?

Запуск тестов, даже установив значение 100, имеет список, превышающий желаемую высоту.

Просьба сообщить

Ответы

Ответ 1

В соответствии с документацией, которую вы указали: пиксели. См. эту функцию

либо MATCH_PARENT, WRAP_CONTENT, либо фиксированный размер в пикселях

Несмотря на то, что используемая вами функция не имеет явной документации, подразумевается, что она использует ту же документацию, что и функция с большинством параметров. Сама функция, вероятно, выглядит так:

LinearLayout.LayoutParams(int width, int height) {
    this(width, height, /*some default value*/);
}

то есть. он просто вызывает 3-параметрическую версию со значением по умолчанию.

Ответ 2

Как сказал Дэвид, установка LayoutParams через код устанавливается в пикселях. Вы можете использовать код в этот поток для преобразования желаемого dp в px.

Ответ 3

Здесь полный класс с импортом, если у вас возникли проблемы - @Pierre.Vriens

//usage: int 300dpInPixels = util.convertDpToPixel(300);

import android.content.res.Resources;
import android.util.DisplayMetrics;

public class utils {
    public static int convertDpToPixel(float dp){
        DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
        float px = dp * (metrics.densityDpi / 160f);
        return Math.round(px);
    }
}