自定义枚举属性提供错误不允许使用字符串类型

时间:2015-12-17 13:41:07

标签: java android xml enums textview

大家好我正在尝试使用字体实现自定义TextView。我决定使用RobotoTextView。我在资产中也有字体文件夹。我在{i = {}}获得了错误。

错误:

  

AGPBI:{" kind":"错误","文字":"不允许字符串类型(at   \ u0027typeface \ u0027有价值   \ u0027robotoLight \ u0027)""来源":[{"文件":"路径/到/文件/ thisxml.xml"&# 34;位置" {" STARTLINE":32," STARTCOLUMN":33,"开始偏移":1357," ENDCOLUMN&#34 ;: 44," endOffset":1368}}],"原":""}

任何帮助都将不胜感激。

我的自定义TextView布局

**custom:typeface="robotoLight"**

以下是具有styleable的属性文件:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/my.package.name"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#99f9fafa"
        android:padding="0dp" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#99f9fafa"
            android:orientation="vertical"
            android:padding="0dp" >
            <ImageView
                android:id="@+id/bigImage"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/noproperty"/>

            <utils.RobotoTextView
                android:id="@+id/propertyPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:maxLines="1"
                android:text="Product Name"
                android:textColor="@color/main_color_grey_800"
                android:textSize="14sp"
                custom:typeface="robotoLight"/>
        </LinearLayout>
    </LinearLayout>

    <View
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/main_purple"/>
        <!--android:background="@color/main_color_500" />-->
</LinearLayout>

我的班级自定义文本视图     公共类RobotoTextView扩展了TextView {

<declare-styleable name="RobotoTextView">
    <attr name="typeface" format="enum">
        <enum name="robotoBlack" value="0" />
        <enum name="robotoBlackItalic" value="1" />
        <enum name="robotoBold" value="2" />
        <enum name="robotoBoldItalic" value="3" />
        <enum name="robotoBoldCondensed" value="4" />
        <enum name="robotoBoldCondensedItalic" value="5" />
        <enum name="robotoCondensed" value="6" />
        <enum name="robotoCondensedItalic" value="7" />
        <enum name="robotoItalic" value="8" />
        <enum name="robotoLight" value="9" />
        <enum name="robotoLightItalic" value="10" />
        <enum name="robotoMedium" value="11" />
        <enum name="robotoMediumItalic" value="12" />
        <enum name="robotoRegular" value="13" />
        <enum name="robotoThin" value="14" />
        <enum name="robotoThinItalic" value="15" />
    </attr>
</declare-styleable>

2 个答案:

答案 0 :(得分:1)

更改以下代码

<declare-styleable name="RobotoTextView">
    <attr name="typeface" format="enum">
        <enum name="robotoBlack" value="0" />
        <enum name="robotoBlackItalic" value="1" />
        <enum name="robotoBold" value="2" />
        <enum name="robotoBoldItalic" value="3" />
        <enum name="robotoBoldCondensed" value="4" />
        <enum name="robotoBoldCondensedItalic" value="5" />
        <enum name="robotoCondensed" value="6" />
        <enum name="robotoCondensedItalic" value="7" />
        <enum name="robotoItalic" value="8" />
        <enum name="robotoLight" value="9" />
        <enum name="robotoLightItalic" value="10" />
        <enum name="robotoMedium" value="11" />
        <enum name="robotoMediumItalic" value="12" />
        <enum name="robotoRegular" value="13" />
        <enum name="robotoThin" value="14" />
        <enum name="robotoThinItalic" value="15" />
    </attr>
</declare-styleable>

到这个

<declare-styleable name="RobotoTextView"> 
     <attr name="typeface" />
</declare-styleable>

<attr name="typeface" format="enum">
    <enum name="robotoBlack" value="0" />
    <enum name="robotoBlackItalic" value="1" />
    <enum name="robotoBold" value="2" />
    <enum name="robotoBoldItalic" value="3" />
    <enum name="robotoBoldCondensed" value="4" />
    <enum name="robotoBoldCondensedItalic" value="5" />
    <enum name="robotoCondensed" value="6" />
    <enum name="robotoCondensedItalic" value="7" />
    <enum name="robotoItalic" value="8" />
    <enum name="robotoLight" value="9" />
    <enum name="robotoLightItalic" value="10" />
    <enum name="robotoMedium" value="11" />
    <enum name="robotoMediumItalic" value="12" />
    <enum name="robotoRegular" value="13" />
    <enum name="robotoThin" value="14" />
    <enum name="robotoThinItalic" value="15" />
 </attr>

答案 1 :(得分:1)

xmlns:custom="http://schemas.android.com/apk/res/my.package.name" 

是添加自定义命名空间的旧样式。尝试使用以下内容自动替换正确的包 -

xmlns:custom="http://schemas.android.com/apk/res-auto"