Программное создание Layout'a

В чем, при такой записи, указывается margin ? Просто чтобы он у меня был такой же, как при обычном создании в xml, мне приходится в коде указывать его в 2 раза больше. Вопрос, всегда ли так будет, или это только на некоторых устройствах ?

LinearLayout backgroundLinearLayout = new LinearLayout(this);
    LinearLayout.LayoutParams backgroundLinearLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    backgroundLinearLayoutParams.setMarginStart(24);

Ответы (1 шт):

Автор решения: Barmaley Red Star

При программном задании все единицы указываются в пикселях. Для того, чтобы указывать в dp, необходимо их пересчитывать вручную - примерно так:

int dpValue = 15; // размер в dp
float d = context.getResources().getDisplayMetrics().density; //показатель плотности
int margin = (int)(dpValue * d); // размер в пикселях

Для пересчета в sp:

float spValue = 14.0;
float s = context.getResources().getDisplayMetrics().scaledDensity;
int margin = (int)(spValue * s) //размер в пикселях
→ Ссылка