Какую единицу измерения использует 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);
}
}