Android: Как установить переменные XML dimen программно

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

например, dimens.xml содержит такие параметры:

<dimen name="textSize_normal">20dp</dimen>
<dimen name="buttonTextSize_normal">15dp</dimen>
<dimen name="editTextSize_normal">17dp</dimen>
<dimen name="buttonHeight_normal">37dp</dimen>
<dimen name="margin_normal">5dp</dimen>

и в моем main.xml, например, я бы установил размер текста для TextView делая что-то вроде этого:

android:textSize="@dimen/editTextSize_normal"

он отлично работает.

теперь, мои вопросы, можно ли установить значения для dimen переменные в my программно от моей основной деятельности? То, что я пытаюсь сделать, это получить размер экрана, и установить, например,textSize на основе доли высоты экрана, так что он легко адаптируется к любому размеру экрана. Я все это выяснил, мне просто нужна ваша помощь, чтобы выяснить, как установить dimen переменные в своем коде.

4 ответов


теперь, мои вопросы, можно ли установить значения для переменных dimen в моем dimen.xml-файл программно из моей основной деятельности?

нет.

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

игнорируя, что это странный подход к пользовательскому интерфейсу, способ сделать это - удалить android:textSize атрибуты и изменить размер текста во время выполнения, используя setTextSize() в Java.

Я все это выяснил, мне просто нужна ваша помощь, чтобы выяснить, как установить переменные dimen в моем коде.

вы не "устанавливаете переменные dimen". Вы применяете свои вычисления к виджетам через сеттеры, такие как setTextSize().


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


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

читать данное руководство.


Я думаю, что вы имеете в виду, чтобы изменить размер в зависимости от размера экрана устройства.. что можно сделать, создав несколько dimens.xml-файлы в папках, таких как values-hdpi, values-xhdpi, values-xxhdpi, values-mdpi,.. а затем во время выполнения компилятор выберет dimen в зависимости от dpi я на самом деле не пробовал это раньше, но я прочитал его здесь.. взгляните на это: http://developer.android.com/guide/practices/screens_support.html#qualifiers