5

我将自定义属性样式设置为

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

在布局文件中,我可以使用这个自定义属性为这个属性分配一个命名空间:

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

但是它没有在styles.xml 中识别这个自定义标签

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

错误:未找到与给定名称、效果匹配的资源,尽管我将命名空间与在 RelativeLayout 文件中所做的相同。

有任何想法吗?谢谢

4

2 回答 2

23

将您的 XML 更改为:

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

并改变你的风格:

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

我对字体做了类似的事情:

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

于 2013-04-05T01:13:38.013 回答
0

Gradle 不建议在xmln:.
在 Gradle 项目中,最终 APK 中使用的实际包可能会有所不同;例如,您可以在一个版本而不是另一个版本中添加 .debug 包后缀。因此,您不应该在资源中硬编码应用程序包;相反,使用特殊的命名空间http://schemas.android.com/apk/res-auto,这将导致工具为资源找出正确的命名空间,而不管构建期间使用的实际包。

于 2018-05-21T09:35:47.033 回答