Как переопределить (или скрыть) атрибуты стиля, определенные в проекте библиотеки Android? - PullRequest
11 голосов
/ 15 октября 2011

У меня есть множество похожих приложений.Я извлек общие ресурсы и код в библиотечный проект, а приложения просто переопределяют то, что им нужно.В моей библиотеке определен следующий стиль:

<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-библиотек и стилей приложения.

PS: Одним из возможных решений моей проблемы было бы избавиться от android:layout_toRightOf в стилях и вместо этого переместить его в макет XML.Затем в целевом приложении этот макет может быть переопределен / переопределен.Но я ищу решение на основе стилей, поскольку оно может обеспечить более простой и понятный способ переопределения атрибутов.
(Я также могу использовать унаследованный стиль с атрибутом parent, но для этого снова потребуется переопределение макета вприложение, которого я стараюсь избегать).

Ответы [ 2 ]

6 голосов
/ 25 октября 2011

Чтобы отключить 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>
0 голосов
/ 15 октября 2011

Вы можете использовать «родительский» для получения специализированного стиля (см. http://developer.android.com/guide/topics/ui/themes.html), но определение таких раскладок с помощью стилей не кажется мне способом решения этой проблемы. Можно оставить некоторую компоновку информация в файлах макета.

...