0

Ich brauche Hilfe mit ConstraintLayout.Wie kann ich Constraint programmgesteuert ändern

Ich habe 3 Schaltflächen vertikal ausgerichtet.Button 1 und 3 sind sichtbar, Button 2 ist unsichtbar. Wenn ich auf Button 1 klicke, sollte Button 2 sichtbar sein.

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="8dp" 
    android:onClick="on_expand" 
    android:text="Button" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/textView" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_marginTop="8dp" 
    android:text="Button" 
    android:visibility="invisible" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/button1" /> 

<Button 
    android:id="@+id/button3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="8dp" 
    android:text="Button" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@id/button1" /> 

Wie kann ich

app:layout_constraintTop_toBottomOf="@id/button2" 

auf Button3

ich diesen

Button b1 = (Button)findViewById(R.id.button1); 
Button b2 = (Button) findViewById(R.id.button2); 
Button b3 = (Button) findViewById(R.id.button3);  

ConstraintSet constraintSet = new ConstraintSet(); 
     constraintSet.connect("What must i set here????"); 
     constraintSet.clone(mConstraintLayout); 
     constraintSet.applyTo(mConstraintLayout); 

Antwort

1

ersten Add gefunden haben:

android:id="@+id/constraint_layout" 
ändern

auf Ihre ConstraintLayout, dann:

android:onClick="on_expand" 

in:

android:onClick="onExpand" 

lowerCamelCase Methoden Namenskonvention zu respektieren.

Schließlich sollte dieser Code sein:

public class MainActivity extends AppCompatActivity { 

private ConstraintLayout mConstraintLayout; 
private Button mButton; 
private ConstraintSet mConstraintSet = new ConstraintSet(); 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mConstraintLayout = findViewById(R.id.constraint_layout); 
    mButton = findViewById(R.id.button2); 
} 

public void onExpand(View view) { 
    // If the button is already visible then you don't need to apply any constraints 
    if (mButton.getVisibility() == View.VISIBLE) { 
     return; 
    } 
    /* Otherwise: 
    - Make the button2 visible; 
    - Insert the actual constraints in the ConstraintSet 
    - Define a new constraint between button3 and button2 (TopToBottomOf) 
    - Apply it to the ConstraintLayout */ 
    mButton.setVisibility(View.VISIBLE); 
    mConstraintSet.clone(mConstraintLayout); 
    mConstraintSet.connect(R.id.button3, ConstraintSet.TOP, 
          R.id.button2, ConstraintSet.BOTTOM); 
    mConstraintSet.applyTo(mConstraintLayout); 
    } 
} 
Verwandte Themen