Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to override (or hide) style attributes defined in the Android library project?

I have a set of similar applications. I extracted common resources and code to the library project and applications just override what they need to. In my library there is the following style defined:

<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>

As you can see it contains android:layout_toRightOf attribute as this style would be applied to the text in the ListView row which should be displayed to the right of the image in that row.
However in one of my applications I'd like to display the text below the image. How the ListItemText style in that application should be defined to override android:layout_toRightOf attribute value and replace it with android:layout_below?

If I define it as:

<style name="ListItemText">
    <item name="android:layout_below">@id/preview_image</item>
</style>

it displays text to the right and below the image, effectively summing up attributes from both library and application styles XMLs.

p.s.: One possible solution of my issue would be to get rid of android:layout_toRightOf in the styles and move it to the layout xml instead. Then in the target application this layout can be redefined/overridden. But I'm looking for style-based solution, since it could provide more simple and straightforward way of attribute overriding.
(I can also use the inherited style with the parent attribute, but this would again require layout overriding in the application, which I try to avoid).

like image 883
Idolon Avatar asked Oct 15 '11 18:10

Idolon


People also ask

How to add styles XML in Android Studio?

Create and apply a style To create a new style or theme, open your project's res/values/styles. xml file. For each style you want to create, follow these steps: Add a <style> element with a name that uniquely identifies the style.

What is tools showIn?

tools:showInThis attribute allows you to point to a layout that uses this layout as an include, so you can preview (and edit) this file as it appears while embedded in its parent layout. For example: <TextView xmlns:android="http://schemas.android.com/apk/res/android"

Which of the following are attributes in Android?

The attribute type is one of the strings "CDATA", "ID", "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES", or "NOTATION" (always in upper case).


1 Answers

To disable android:layout_toRightOf, you can set it to @null. If your app defines the ListItemText style as follows, it should work as you want:

<style name="ListItemText">
    <item name="android:layout_toRightOf">@null</item>
    <item name="android:layout_below">@id/preview_image</item>
</style>
like image 140
Martin Nordholts Avatar answered Oct 11 '22 03:10

Martin Nordholts