5

I made a custom attribute style as

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="EffectsTextView">        
        <attr name="strokeWidth" format="float" />
        <attr name="strokeMiter" format="float" />
        <attr name="strokeColor" format="color" />        
    </declare-styleable>
</resources>

In Layout file, I could use this custom attribute assigning a namespace for this attribute:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    
xmlns:effects="http://schemas.android.com/apk/res-auto/com.base.view.EffectsTextView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#40000000" >

 <com.base.view.EffectsTextView
        android:id="@+id/textView1"
        android:layout_width="290dip"
        android:layout_height="80dip"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="16dip"
        android:gravity="center"
        android:text="SETTINGS"
        android:textSize="44dip"
        android:textStyle="bold"  
        effects:strokeWidth="10"  />    <--- custom tag "effects"

However it was not recognizing this custom tag in styles.xml

<style name="EffectsHeaderTextStyle">
     <item name="effects:strokeWidth">10</item>
</style>

Error: No resource found that matches the given name, effects, though I put the namespace same as I did in RelativeLayout file.

Any ideas? Thanks

2 Answers 2

23

Change your XML to:

xmlns:effects="http://schemas.android.com/apk/res/com.base.view.EffectsTextView"

And change your style:

<style name="EffectsHeaderTextStyle">
    <item name="strokeWidth">10</item>
</style>

I did something similar with fonts:

https://github.com/androidfu/CodeExamples/tree/master/com.androidfu.CustomFontsDemo

Sign up to request clarification or add additional context in comments.

1 Comment

This totally works, but I found that in IntelliJ I would get a 'declared namespace is never used' warning. I removed the xmlns declaration and it still worked. It seems, at least in IntelliJ, that you don't need namespaces for attributes of custom views...
0

Gradle doesn't recommend using the actual package in xmln:.
In Gradle projects, the actual package used in the final APK can vary; for example, you can add a .debug package suffix in one version and not the other. Therefore, you should not hardcode the application package in the resource; instead, use the special namespace http://schemas.android.com/apk/res-auto which will cause the tools to figure out the right namespace for the resource regardless of the actual package used during the build.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.