Какую единицу измерения использует 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 имеет список, превышающий желаемую высоту.

пожалуйста

3 ответов


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

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

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

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

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


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


вот полный класс с импортом, если у вас возникли проблемы - @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);
    }
}