Как мне установить Layout и Text size на DP внутри программы? - PullRequest
35 голосов
/ 23 июля 2010

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

Ответы [ 3 ]

83 голосов
/ 23 июля 2012

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

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

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

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

47 голосов
/ 17 февраля 2011

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

Выдержка:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
10 голосов
/ 15 июля 2015

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

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> установлено в вашемФайл измерения.xml, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...