Переопределение «предметов» в стиле Android. - PullRequest
12 голосов
/ 20 июля 2011

У меня есть библиотека Android с темами, атрибутами, стилями, цветами и, конечно же, кодом.

Для таких вещей, как высота разделителя, цвета элементов и т. Д. У меня есть возможность переопределять размеры, используя размеры.xml, и цвет, используя цвета.xml (оставляя макеты, тему и стиль в одиночку).

Однако, если у меня есть ListView, который использует Android list_selector_background, и у меня также есть другое действие, которое использует этот селектор для текстового просмотра с возможностью нажатия, кроме переопределения его в коде, я не могу найти способ сделать это, используя ? style: attrib синтаксис, но я не вижу, как это помогает

Самое простое и быстрое решение, которое у меня сейчас есть, - это создать стиль:

<style name="ResultsListViewStyle" >
    <item name="android:listSelector">@android:drawable/list_selector_background</item>
</style>

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

Ответы [ 2 ]

14 голосов
/ 21 июля 2011

Поскольку никто не выбрал перчатку, в конце концов, я нашел решение, действительно, как атрибут.
Решение:

  1. В вашем attrs.xml создатьзапись для нужного вам значения, например для селектора типа drawbale, используйте: <attr name="ListResultSelector" format="reference" />

  2. В вашем theme.xml определите вашу тему, если этот атрибутваша единственная, и вы хотите использовать нормальную тему Android в качестве темы, которую вы можете использовать:

    <style name="Theme" parent="@android:style/Theme.NoTitleBar">
      <item name="ListResultSelector">@android:drawable/list_selector_background</item>
    </style>
    
  3. Если вы хотите переопределить в определенном приложении, вы можете просто наследовать 'theme' (<style name="Theme.newTheme">) и измените это конкретное свойство там.

  4. В своем стиле вместо определения рисунка вы можете определить: <....android:background="?attrib:ListResultSelector" ../>

  5. Применить тему либо к вашему приложению, либо к соответствующемудеятельность

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

1 голос
/ 25 сентября 2012

Исправляя ответ @ codeScriber:

На ресурсы, определенные в темах, можно ссылаться в макетах через ?attr/ListResultSelector или просто ?ListResultSelector.

. См. Также документы, относящиеся к этому: http://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes

...