Как использовать переменную, определенную темой в res / values ​​/ dimensions.xml? - PullRequest
3 голосов
/ 12 мая 2011

Хауди. В моем определении themes.xml у меня есть следующее:

<style name="mythemename">
     <item name="d_myvar">100dip</item>
</style>

Я хотел бы иметь возможность ссылаться на это в res / values ​​/ dimensions.xml следующим образом:

<dimen name="myvar">?d_myvar</dimen>

Увы, это не работает. Когда я пытаюсь использовать @ dimension / myvar в качестве высоты LinearLayout, приложение вылетает с ошибкой «Необходимо указать атрибут высоты макета».

Я также пытался

  <dimen name="myvar" value="?d_myvar" />

Но это не скомпилируется.

Как мне определить @ dimension / myvar в моем xml, чтобы он загружал переменную ? D_myvar , определенную в теме?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Я видел ваш запрос о помощи в итальянской сцене запуска.

К сожалению, в соответствии с синтаксисом тега dimen :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>

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

 ?[package:][type:]name

Решения :

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

  • Возможно, вы сможете реорганизовать свой код для повторного использования d_myvar посредством наследования ?

  • В качестве последнего и отчаянного средства я хотел бы использовать сценарий оболочки, который автоматизирует процесс подстановки переменных с использованием инструментов командной строки xml.Я никогда не использовал их лично, но посмотрите, например, xmllint , xmlstarlet или эту статью .

2 голосов
/ 17 июня 2015

В styles.xml

<resources>

    <attr format="dimension" name="exampleDimension"/>

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="exampleDimension">100dp</item>
        ...
    </style>
</resources>

Затем в другом XML-файле, чтобы использовать новый атрибут, вы должны использовать его следующим образом

android:padding="?attr/exampleDimension"
2 голосов
/ 12 мая 2011

Поместите часть 100dip в ваши измерения.xml следующим образом:

<dimen name="myvar">100dp</dimen>

, затем в своей теме вы можете ссылаться на нее как @dimen/myvar, если вам нужно, или вы можете ссылаться на нее в коде, используяR.dimen.myvar

Другими словами, вы не устанавливаете измерение в теме, а затем ссылаетесь на него в Dimens.xml, а наоборот.Вы задаете измерение в Dimens.xml, а затем ссылаетесь на него в своей теме / стиле xml.

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