2017-02-17 8 views
3

Я пытаюсь создать собственное представление с атрибутом с именем borderWidth. Когда я пытаюсь запустить мое приложение я получаю сообщение об ошибке:Атрибут Android уже определен

E:\Android Studio Projects\MyApp\app\build\intermediates\res\merged\debug\values\values.xml Error:(341) Attribute "borderWidth" has already been defined

В values.xml файле, он указует, что я могу видеть, что borderWidth уже используется для умолчанию FloatingActionButton и несколько других по умолчанию андроида виджетов:

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

ответ

0

Как ответ в this question состояниях, единственный способ использовать определенное имя, которое уже было использовано на андроид, чтобы повторно использовать его. Однако это не подходит в этой ситуации, потому что мои атрибуты имеют другое значение из стандартного андроида, поэтому мне просто нужно переименовать мой.

Поэтому я буду переименовывать borderWidth в graphBorderWidth.

0

You может повторно использовать att ribute. Это пример

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

Для получения дополнительной информации https://developer.android.com/training/custom-views/create-view.html#customattr

+0

Я пробовал это, но он дает следующую ошибку: 'Ошибка: Найдено элемент Attr/borderWidth более одного раза' – TychoTheTaco

+0

Вы можете использовать собственное пространство имен. Посмотрите здесь https://developer.android.com/training/custom-views/create-view.html#customattr. Вы добавляете свои пользовательские атрибуты в файл с именем attrs.xml? – Flood2d

+0

У меня уже есть пространство имен, настроенное следующим образом: 'xmlns: custom =" http://schemas.android.com/apk/res-auto "', но ошибка все еще существует. – TychoTheTaco