2017-07-27 5 views
0

Ich habe versucht, eine GUI für meine App (mit ConstraintLayout) zu machen, wo ich Bilder haben, die wie Schaltflächen ausgerichtet sind, aber diese Schaltflächen (oder irgendetwas tatsächlich) haben dieses seltsame Problem, wo selbst wenn ich bewege (und speichern) die Constraint-Position, es geht nur auf eine Nummer zurück (in diesem Fall 16).ConstraintLayout Editor Biased

Was mache ich hier falsch? Was verursacht das/Warum setzt der Editor die Position zurück?

http://i.imgur.com/OFndFb7.gifv (GIF - 40 Jahre)

Versionen:

  • ConstraintLayout für Android - v 1.0.2
  • Android Studio - 2.3.3 # AI-162,4069837

XML für das Layout:

<?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:layout_editor_absoluteY="25dp" 
    tools:layout_editor_absoluteX="0dp"> 

    <Button 
     android:id="@+id/Button_Color_Red" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_marginTop="80dp" 
     android:layout_marginStart="16dp" 
     android:background="@drawable/btn_red_color_menu" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" /> 

    <Button 
     android:id="@+id/Button_Color_Indigo" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_marginTop="80dp" 
     android:layout_marginStart="8dp" 
     android:background="@drawable/btn_indigo_color_menu" 
     app:layout_constraintLeft_toRightOf="@+id/Button_Color_Yellow" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <Button 
     android:id="@+id/Button_Color_Green" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_marginTop="80dp" 
     android:layout_marginStart="8dp" 
     android:background="@drawable/btn_green_color_menu" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toRightOf="@+id/Button_Color_Indigo"/> 

    <Button 
     android:id="@+id/Button_Color_Yellow" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_marginTop="80dp" 
     android:layout_marginStart="8dp" 
     android:background="@drawable/btn_yellow_color_menu" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toRightOf="@+id/Button_Color_Red" /> 

</android.support.constraint.ConstraintLayout> 

XML für btn_x_color_menu:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/Red_Primary"/> 
     </shape> 
    </item> 
</selector> 
+0

Wenn Sie in das XML schauen, ändern sich dort auch die Ränder wieder auf 16dp? –

+0

Ja, 'android: layout_marginStart =" 16dp "' – Fabricio20

+0

Hm. Ich bin ratlos ... Ich benutze nie den Design-Tab, daher bin ich mit seinen Macken nicht besonders vertraut. –

Antwort

2

Es gibt zwei Attribute auf die Schaltfläche Button_Color_Green, die miteinander in Konflikt stehen.

android:layout_marginLeft="16dp" 
    android:layout_marginStart="8dp" 

Der Designer schafft android:layout_marginLeft wenn Sie die Taste bewegen, aber android:layout_marginStart bleibt unverändert und in Konflikt. Aus diesem Grund wird der Rand zurückgesetzt, nachdem Sie das Widget verschoben haben.

Diese beiden Attribute sollten für ein Layout von links nach rechts gleich sein, aber der Designer scheint android:layout_marginLeft ändern zu wollen, aber er ehrt android:layout_marginStart, wenn er vorhanden ist.

Dies ist möglicherweise ein Fehler in ConstraintLayout 1.0.2. Bis eine Lösung gefunden wurde, können Sie diese Attribute einfach manuell ändern oder einfach android:layout_marginLeft verwenden und manuell android:layout_marginStart zu einem späteren Zeitpunkt hinzufügen. (Lint sollte Sie daran erinnern, dies zu tun.)

Nun, da Sie das Problem kennen, können Sie möglicherweise eine bessere Lösung ausarbeiten.

Ich hoffe, das hilft.

+1

Guter Fang. Wenn Sie API 17+ als Ziel verwenden können, schreiben Sie einfach "android: layout_marginStart" und "android: layout_marginLeft". – ephemient

Verwandte Themen