Android开发中activity_main.xml出现duplicate attribute错误求助
Hey there! I see you're stuck with that frustrating duplicate attribute error while building your simple calculator app—let's get this sorted out quickly.
The Root Cause
Looking at your activity_main.xml code, the problem is duplicate namespace declaration in your root ConstraintLayout tag. You've added xmlns:android="http://schemas.android.com/apk/res/android" twice at the top of the layout file, which Android Studio can't handle.
Here's the problematic line block:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" <!-- This is the duplicate line! --> ...>
Fixed Layout Code
Just remove that second xmlns:android declaration, and your layout should compile without issues. Here's the corrected full code:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/number5" android:layout_width="81dp" android:layout_height="72dp" android:text="5" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.336" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.881" /> <Button android:id="@+id/number4" android:layout_width="81dp" android:layout_height="72dp" android:text="4" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.027" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.881" /> <Button android:id="@+id/number7" android:layout_width="81dp" android:layout_height="72dp" android:text="7" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.027" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1.0" /> <Button android:id="@+id/number8" android:layout_width="81dp" android:layout_height="72dp" android:text="8" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.336" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1.0" /> <Button android:id="@+id/number1" android:layout_width="81dp" android:layout_height="72dp" android:text="1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.027" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.748" /> <Button android:id="@+id/brackets" android:layout_width="81dp" android:layout_height="72dp" android:text="( )" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.951" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.749" /> <Button android:id="@+id/number9" android:layout_width="81dp" android:layout_height="72dp" android:text="9" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.633" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1.0" /> <Button android:id="@+id/number6" android:layout_width="81dp" android:layout_height="72dp" android:text="6" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.633" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.881" /> <Button android:id="@+id/multiply" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Multiply" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.346" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.631" /> <Button android:id="@+id/divide" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Divide" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.972" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.631" /> <Button android:id="@+id/add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.027" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.631" /> <Button android:id="@+id/number2" android:layout_width="81dp" android:layout_height="72dp" android:text="2" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.336" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.749" /> <Button android:id="@+id/number3" android:layout_width="81dp" android:layout_height="72dp" android:text="3" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.633" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.749" /> <Button android:id="@+id/history" android:layout_width="98dp" android:layout_height="45dp" android:background="@drawable/roundbutton" android:text="History" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.968" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.008" /> <Button android:id="@+id/subtract" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Subtract" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.661" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.631" /> </android.support.constraint.ConstraintLayout>
Quick Tip for Future Projects
Always remember that each XML namespace (like xmlns:android, xmlns:app) only needs to be declared once in the root layout tag. Duplicating these declarations will trigger attribute conflicts like the one you ran into.
Happy coding with your calculator app!
内容的提问来源于stack exchange,提问作者Mahir Islam

