Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to add a custom property into a style in an android resource?

Tags:

I'm a using a view flow component into my project, which allows the dev to override some attributes, like that :

<org.taptwo.android.widget.TitleFlowIndicator     ...     app:footerTriangleHeight="0dip"     ... /> 

I am reusing this component into several layouts, and I would like to put the properties into a style. But when I'm doing this, the parser says Error: No resource found that matches the given name: attr 'app:footerTriangleHeight', even if I add the namespace in the styles file.

Is there a way to do that in android ?

Thanks.

like image 831
Matthieu Oger Avatar asked Aug 29 '11 12:08

Matthieu Oger


People also ask

How do I style 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.

How do I create a style folder in Android?

Right click on res folder, choose New --> Android resource file, set the same name for the new file "styles", in Available qualifiers: choose the last item "Version" and finally set "Platform API level" 21. Save this answer. Show activity on this post. By default, Android Studio doesn't create styles.

Where is style defined in Android?

A style is defined in an XML resource that is separate from the XML that specifies the layout. This XML file resides under res/values/ directory of your project and will have <resources> as the root node which is mandatory for the style file. The name of the XML file is arbitrary, but it must use the . xml extension.


2 Answers

Android Application

If you are not using Android Libraries, then here is what you can do:

  1. Define custom styleable attribute (I guess you've already done that).
  2. Do not use your namespace prefix in style items (namespace defaults to current app's namespace).

Example:

In attrs.xml:

<?xml version="1.0" encoding="utf-8"?> <resources>     <attr name="testAttr" format="string"/>         </resources> 

In styles.xml:

<?xml version="1.0" encoding="utf-8"?> <resources>             <style name="TestStyle" >       <item name="testAttr">asdf</item>     </style>         </resources> 

Android Library

If custom attribute comes from Android Library, you can still use described approach. It theoretically should work, because Android Library's namespace is the same as application's (from aapt tool perspective during the build). But I haven't test this myself.


If you're specifying namespace, it will show error. As far as I know, styles do not support xml namespaces. So this will fail:

In styles.xml:

<?xml version="1.0" encoding="utf-8"?> <resources xmlns:app="http://schemas.android.com/apk/res/app.package.name">             <style name="TestStyle" >       <item name="app:testAttr">asdf</item>     </style>         </resources> 

Parser automatically defaults to current app's AndroidManifest namespace, though you can not specify this namespace explicitly.

like image 74
inazaruk Avatar answered Oct 26 '22 19:10

inazaruk


You can define the style in terms of your namespace, i've used it myself

i.e

<style name="whatever">     <item name="YourPackage.YourSubPackage:parametername">@drawable_or_anything/bla</item> </style> 
like image 30
Kurru Avatar answered Oct 26 '22 19:10

Kurru