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

Когда должен использоваться файл dimens.xml в Android?

Например, в конкретном макете у меня есть следующий XML:

<GridView
    android:id="@+id/gridView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="3dp"
    android:columnWidth="48dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="spacingWidth" />

Этот вид сетки специфичен для этого макета, и я не думаю, что буду использовать другие виды сетки со схожими свойствами. Это означает, что значения измерения в коде специфичны для этого вида сетки.

Должен ли я по-прежнему перемещать их в файл dimens.xml или это просто оставить их такими? Если это так, следует ли размещать значения в файле dimens.xml только тогда, когда это значение используется для нескольких макетов?

4b9b3361

Ответ 1

Я отбрасываю значения измерения в ресурс dimens.xml, как правило, по трем причинам:

  • Повторное использование: мне нужно несколько виджетах или макетам использовать одно и то же значение, и я хочу изменить его один раз при обновлении или настройке приложения.
  • Разница в плотности: если мне нужно, чтобы размер был немного меньше или больше от ldpi → hdpi или small → large
  • Чтение из кода: когда я создаю представление в коде и хочу применить некоторые статические измерения, помещая их в dimens.xml как "dp" или "dip", я могу получить масштабированное значение в Java-коде с помощью Resources.getDimensionPixelSize()

НТН!

Ответ 2

Файл dimens.xml используется для хранения всех значений жестко закодированных пикселей в одном месте.

Теперь, хотя вы не можете повторно использовать эти значения прямо сейчас, все же рекомендуется разместить их в dimens.xml для использования в будущем. Кроме того, следуя стандартной парадигме программирования Android, другие разработчики быстрее понимают ваш код. Это очень похоже на strings.xml, где мы помещаем String, некоторые из которых в конечном итоге используются только один раз!:)

Ответ 3

Дополнительный ответ

@Devunwired перечисляет 3 причины использовать dimens.xml. Вот подробности о том, как это сделать.

1. Повторное использование

Если вы установите значение dp или sp в dimens.xml один раз, как этот

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_padding">16dp</dimen>
    <dimen name="large_text_size">30sp</dimen>
</resources>

вы можете повторно использовать его во всем приложении в нескольких местах.

<TextView
    android:padding="@dimen/textview_padding"
    android:textSize="@dimen/large_text_size"
    ... />

<TextView
    android:padding="@dimen/textview_padding"
    android:textSize="@dimen/large_text_size"
    ... />

Затем, когда вам нужно внести изменения, вам нужно всего лишь сделать это в одном месте.

Примечания

  • Это в основном тот же эффект, что и стиль или тема.
  • Будьте осторожны, чтобы не дать двум различным представлениям одно и то же значение dimen, если они действительно не должны быть. Если вам нужно внести изменения в один набор представлений, но не в другой, вам придется возвращаться к каждому в отдельности, что побеждает цель.

2. Разница в размере

  • @Devunwired назвал эту разницу в плотности, но если вы используете dp (независимые от плотности пиксели), это уже позаботится о проблеме разности плотности для всех, кроме самых мелких случаев. Поэтому, на мой взгляд, размер экрана является более важным фактором для использования dimens.xml.

Атрибут 8dp может отлично выглядеть на телефоне, но когда приложение запускается на планшете, оно выглядит слишком узким. Вы можете решить эту проблему, выполнив две (или более) версии dimens.xml.

Щелкните правой кнопкой мыши папку res и выберите Новый > Файл ресурса значения. Затем напишите в dimens и выберите Наименьшая ширина экрана. Напишите в 600 для ширины (7-дюймовый планшет). (Существуют другие способы выбора размеров. См. Документацию и этот ответ для более.)

введите описание изображения здесь

Это создаст другую папку values, которая будет использоваться для устройств с наименьшей шириной экрана 600dp. В представлении Android два файла dimens.xml выглядят следующим образом.

введите описание изображения здесь

Теперь вы можете изменять их самостоятельно.

значения/dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="my_default_padding">16dp</dimen>
</resources>

значения-sw600dp/dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="my_default_padding">64dp</dimen>
</resources>

При использовании dimen вам нужно только установить его с именем, которое вы использовали в обоих файлах dimens.xml.

<LinearLayout
    ...
    android:padding="@dimen/my_default_padding">

</LinearLayout>

Система автоматически выберет правильное значение для вас в зависимости от используемого пользователем устройства.

3. Чтение из кода

Иногда это программное расширение боли между px и dp (см. этот ответ).

Если у вас есть фиксированное значение dp, уже определенное в dimens.xml, как этот

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="my_dp_value">16dp</dimen>
</resources>

Затем вы можете легко получить его с помощью

int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);

и он уже будет преобразован в пиксели для любого устройства плотности, которое пользователь имеет.