Как переопределить (или скрыть) атрибуты стиля, определенные в проекте библиотеки Android?
У меня есть набор подобных приложений. Я извлек общие ресурсы и код в проект библиотеки, и приложения просто переопределили то, что им нужно. В моей библиотеке указан следующий стиль:
<style name="ListItemText">
<item name="android:layout_toRightOf">@id/preview_image</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">@dimen/previewTextSize</item>
</style>
Как вы можете видеть, он содержит атрибут android:layout_toRightOf
, так как этот стиль будет применен к тексту в строке ListView, который должен отображаться справа от изображения в этой строке.
Однако в одном из моих приложений я хотел бы отобразить текст под изображением. Как стиль ListItemText
в этом приложении должен быть определен для переопределения значения атрибута android:layout_toRightOf
и заменить его на android:layout_below
?
Если я определяю его как:
<style name="ListItemText">
<item name="android:layout_below">@id/preview_image</item>
</style>
он отображает текст справа и ниже изображения, эффективно суммируя атрибуты как из XML, так и из библиотек приложений и приложений.
p.s: Одно из возможных решений моей проблемы состояло в том, чтобы избавиться от android:layout_toRightOf
в стилях и переместить его в макет xml. Затем в целевом приложении этот макет можно переопределить/переопределить. Но я ищу решение на основе стилей, поскольку оно может обеспечить более простой и простой способ переопределения атрибута.
(Я также могу использовать унаследованный стиль с атрибутом parent
, но это снова потребовало бы переопределения макета в приложении, чего я стараюсь избегать).
Ответы
Ответ 1
Чтобы отключить android:layout_toRightOf
, вы можете установить его на @null
. Если ваше приложение определяет стиль ListItemText
следующим образом, оно должно работать так, как вы хотите:
<style name="ListItemText">
<item name="android:layout_toRightOf">@null</item>
<item name="android:layout_below">@id/preview_image</item>
</style>
Ответ 2
Вы можете использовать "parent" для получения специализированного стиля (см. http://developer.android.com/guide/topics/ui/themes.html), но определение макетов, подобных этому, со стилями не ударил меня как способ решить эту проблему. Это нормально оставить некоторые сведения о макете в файлах макета.