Ido*_*lon 11 android styles overriding android-layout android-library
我有一套类似的应用程序.我将公共资源和代码提取到库项目,应用程序只是覆盖了他们需要的东西.在我的库中,定义了以下样式:
<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>
Run Code Online (Sandbox Code Playgroud)
如您所见,它包含android:layout_toRightOf属性,因为此样式将应用于ListView行中的文本,该行应显示在该行中图像的右侧.
但是在我的一个应用程序中,我想在图像下方显示文本.ListItemText应该如何定义该应用程序中的样式以覆盖android:layout_toRightOf属性值并将其替换为android:layout_below?
如果我将其定义为:
<style name="ListItemText">
<item name="android:layout_below">@id/preview_image</item>
</style>
Run Code Online (Sandbox Code Playgroud)
它在图像的右侧和下方显示文本,有效地总结了库和应用程序样式XML的属性.
ps:我的问题的一个可能的解决方案是摆脱android:layout_toRightOf样式并将其移动到布局xml.然后在目标应用程序中,可以重新定义/覆盖此布局.但我正在寻找基于样式的解决方案,因为它可以提供更简单直接的属性覆盖方式.
(我也可以使用带有parent属性的继承样式,但这将再次要求应用程序中的布局覆盖,我试图避免).
要禁用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>
Run Code Online (Sandbox Code Playgroud)