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

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

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

пожалуйста, порекомендуйте


person Roy Hinkley    schedule 29.06.2013    source источник


Ответы (3)


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

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

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

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

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

person J David Smith    schedule 29.06.2013
comment
Итак, при чтении документации методы public LinearLayout.LayoutParams (int width, int height) public LinearLayout.LayoutParams (int width, int height, float weight) используют одно и то же описание: Создает новый набор параметров макета с указанной шириной, высотой а вес. Параметры width ширина, либо MATCH_PARENT, WRAP_CONTENT, либо фиксированный размер в пикселях height высота, либо MATCH_PARENT, WRAP_CONTENT, либо фиксированный размер в пикселях, вес вес - person Roy Hinkley; 29.06.2013
comment
Ага. Функция LinearLayout.LayoutParams(int width, int height) представляет собой перегрузку версии с 3 параметрами, которая, вероятно, выглядит примерно так: (EDIT: добавление в сообщение, потому что комментарии не форматируют код) - person J David Smith; 29.06.2013

Вот полный класс с импортом, если у вас возникли проблемы - @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);
    }
}
person rahaprogramming    schedule 20.01.2018
comment
int 300dpInPixels = convertDpToPixel (300); - person rahaprogramming; 20.01.2018

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

person dors    schedule 29.06.2013