Программное создание 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) //размер в пикселях