Подтвердить что ты не робот

Как установить размер и размер текста в DP внутри программы?

В основном у меня есть это внутри 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 в пиксель?

4b9b3361

Ответ 1

Решено здесь.

Extract:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);

Ответ 2

Вы можете использовать:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());

Теперь значение pixels эквивалентно 10dp при текущей плотности экрана устройства.

TypedValue содержит другие аналогичные методы, которые помогают в преобразовании.

Ответ 3

Только для полноты: другое решение (которое я бы предпочел) для вопроса дано здесь

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, например.