Ответ 1
Решено здесь.
Extract:
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
В основном у меня есть это внутри XML, но мне нужно воссоздать его внутри кода. Как это сделать?
<EditText
android:layout_width="140dp"
android:layout_height="20dp"
android:background="@drawable/input_bg01"
android:textSize="10dp"
android:gravity="center"
android:text="111-222-333 FOOO" />
Я могу использовать это, чтобы установить размер текста, но как насчет layout_width и height?
edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
Есть ли способ сказать, что код использует блок DP вместо пикселя? Или функция преобразования для преобразования DP в пиксель?
Решено здесь.
Extract:
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
Вы можете использовать:
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
Теперь значение pixels
эквивалентно 10dp
при текущей плотности экрана устройства.
TypedValue содержит другие аналогичные методы, которые помогают в преобразовании.
Только для полноты: другое решение (которое я бы предпочел) для вопроса дано здесь
setTextSize(float)
ожидает масштабированное значение пикселя. Итак,setTextSize(10)
даст вам желаемый результат. ОднакоgetDimension()
иgetDimensionPixelSize()
возвращают размер в единицах пикселей.
Итак, для вашего примера это будет
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));
где <dimen name="edtxt_text_size">10dp</dimen>
устанавливается в файле dimens.xml, например.