Android属性已经定义

时间:2017-02-17 01:08:47

标签: java android android-custom-view

我正在尝试使用名为borderWidth的属性创建自定义视图。当我尝试运行我的应用程序时,我收到错误:

  

E:\ Android Studio Projects \ MyApp \ app \ build \ intermediates \ res \ merged \ debug \ values \ values.xml   错误:(341)属性" borderWidth"已定义

在它指向的values.xml文件中,我可以看到borderWidth已经被用于默认的FloatingActionButton和其他一些默认的android小部件:

<style name="Widget.Design.FloatingActionButton" parent="android:Widget">
    <item name="android:background">@drawable/design_fab_background</item>
    <item name="backgroundTint">?attr/colorAccent</item>
    <item name="fabSize">auto</item>
    <item name="elevation">@dimen/design_fab_elevation</item>
    <item name="pressedTranslationZ">@dimen/design_fab_translation_z_pressed</item>
    <item name="rippleColor">?attr/colorControlHighlight</item>
    <item name="borderWidth">@dimen/design_fab_border_width</item>
</style>

我可以在视图中重复使用此名称,还是必须重命名?

修改

这是整个attrs.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--<attr name="borderWidth" format="float" />-->

    <declare-styleable name="ScrollingLineGraph">
        <attr name="unitsX" format="float" />
        <attr name="unitsY" format="float" />

        <attr name="scaleY" format="float" />
        <attr name="scaleX" format="float" />

        <!--<attr name="borderWidth" format="float" />-->
        <attr name="scaleWidth" format="float" />

        <attr name="borderColor" format="color" />
        <attr name="scaleColor" format="color" />
        <attr name="lineColor" format="color" />
        <attr name="highlightColor" format="color" />
        <attr name="labelColor" format="color" />

        <attr name="labelSize" format="float" />
    </declare-styleable>
</resources>

这是我使用自定义视图的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout android:id="@+id/coordinatorLayout_main"
                                                 xmlns:android="http://schemas.android.com/apk/res/android"
                                                 xmlns:custom="http://schemas.android.com/apk/res-auto"
                                                 android:layout_width="match_parent"
                                                 android:layout_height="match_parent"
                                                 android:fitsSystemWindows="false">

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    android:orientation="vertical">

    <!-- Other views -->

    <com.tycho.app.simplegraphs.ui.ScrollingLineGraph
        android:id="@+id/graph1"
        custom:unitsX="10000"
        android:layout_width="200dp"
        android:layout_height="40dp"/>

    <com.tycho.app.simplegraphs.ui.ScrollingLineGraph
        android:id="@+id/graph2"
        android:layout_marginTop="4dp"
        custom:lineColor="#FF0000"
        custom:unitsX="10000"
        custom:highlightColor="#80FF0000"
        android:layout_width="200dp"
        android:layout_height="40dp"/>

    <!-- Other views -->

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

您可以重复使用该属性。这是一个例子

A.txt:

name1 x1 y1
name2 x2 y2
name3 x3 y3
name4 x4 y4
name5 x5 y5
name6 x6 y6
...

B.txt
namea xa ya
name2 x2 y2
name3 x3 y3
nameb xb yb
namec xc yc 
...

了解更多信息https://developer.android.com/training/custom-views/create-view.html#customattr

答案 1 :(得分:0)

作为this question状态的答案,使用已经被android使用的特定名称的唯一方法是重用它。这不适合这种情况,因为我的属性与标准的android属性有不同的含义,所以我只需重命名我的。

所以我将borderWidth重命名为graphBorderWidth