I am trying to make a custom view with an attribute named borderWidth
. When i try to run my app i get the error:
我正在尝试使用名为borderWidth的属性创建自定义视图。当我尝试运行我的应用程序时,我收到错误:
E:\Android Studio Projects\MyApp\app\build\intermediates\res\merged\debug\values\values.xml Error:(341) Attribute "borderWidth" has already been defined
E:\ Android Studio Projects \ MyApp \ app \ build \ intermediates \ res \ merged \ debug \ values \ values.xml错误:(341)属性“borderWidth”已定义
In the values.xml
file that it points to, i can see that borderWidth
is already being used for the default FloatingActionButton
and a couple other default android widgets:
在它指向的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>
Can i reuse this name for my view or do i have to rename it?
我可以在我的视图中重用此名称,还是必须重命名?
Edit
This is the entire attrs.xml
file:
这是整个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>
This is the layout file where my custom view is being used:
这是我使用自定义视图的布局文件:
<?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 个解决方案
#1
0
You can reuse the attribute. This is an example
您可以重用该属性。这是一个例子
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="textSize" format="dimension"/>
<declare-styleable name="View1">
<attr name="textSize"/>
</declare-styleable>
<declare-styleable name="View2">
<attr name="textSize"/>
</declare-styleable>
</resources>
For more info https://developer.android.com/training/custom-views/create-view.html#customattr
有关详细信息,请访问https://developer.android.com/training/custom-views/create-view.html#customattr
#2
0
As the answer in this question states, the only way to use a particular name that has already been used by android is to re-use it. This is not suitable in this situation however because my attributes have a different meaning from the standard android one, so i will just have to rename mine.
正如这个问题的答案所述,使用已经被android使用的特定名称的唯一方法是重用它。这不适合在这种情况下,因为我的属性与标准的android属性有不同的含义,所以我只需重命名我的。
So i will be renaming borderWidth
to graphBorderWidth
.
所以我将borderWidth重命名为graphBorderWidth。
#1
0
You can reuse the attribute. This is an example
您可以重用该属性。这是一个例子
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="textSize" format="dimension"/>
<declare-styleable name="View1">
<attr name="textSize"/>
</declare-styleable>
<declare-styleable name="View2">
<attr name="textSize"/>
</declare-styleable>
</resources>
For more info https://developer.android.com/training/custom-views/create-view.html#customattr
有关详细信息,请访问https://developer.android.com/training/custom-views/create-view.html#customattr
#2
0
As the answer in this question states, the only way to use a particular name that has already been used by android is to re-use it. This is not suitable in this situation however because my attributes have a different meaning from the standard android one, so i will just have to rename mine.
正如这个问题的答案所述,使用已经被android使用的特定名称的唯一方法是重用它。这不适合在这种情况下,因为我的属性与标准的android属性有不同的含义,所以我只需重命名我的。
So i will be renaming borderWidth
to graphBorderWidth
.
所以我将borderWidth重命名为graphBorderWidth。