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

Переопределение "элементов" в стиле Android.

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

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

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

Простое и быстрое решение, которое я имею в настоящее время, это создать стиль:

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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