tutorial - Layout di vincoli Android a livello di programmazione?




toolbar tutorial android (2)

In iOS sono un grande fan dell'eliminazione dello storyboard e dell'utilizzo della struttura di Cartografia per disporre tutto in codice. Questo è stato rubato dal github di Cartography:

constrain(view1, view2) { view1, view2 in
    view1.width   == (view1.superview!.width - 50) * 0.5
    view2.width   == view1.width - 50
    view1.height  == 40
    view2.height  == view1.height
    view1.centerX == view1.superview!.centerX
    view2.centerX == view1.centerX

    view1.top >= view1.superview!.top + 20
    view2.top == view1.bottom + 20
}

C'è qualche equivalente per Android? Sembra che il nuovo Constraint Layout sia un passo nella giusta direzione, ma mi piacerebbe farlo a livello di programmazione.

https://code.i-harness.com


Mi sono imbattuto nello stesso identico dilemma che proviene da iOS, dove mi sento come se la costruzione di viste programmaticamente fosse una pratica più comune.

In questo momento sto trasferendo la libreria Stevia ad Android con Kotlin, dal momento che il nuovo ConstraintLayout è abbastanza simile al nostro amato Autolayout.

Ecco come si definisce una vista semplice

class MyView(context: Context): ConstraintLayout(context) {

  val label = TextView(context)

  init {

      // View Hierarchy
      subviews(
          label
      )

      // Layout
      label.centerInParent()

      // Style
      label.style {
          textSize = 12F
      }
  }}

Si noti che questo è il layout Pure Constraint nativo sotto il cofano, come spiegato dalla risposta di Martin.

È solo l'inizio, ma ha dimostrato di essere un modo delizioso di scrivere visualizzazioni Android in Kotlin finora, quindi ho pensato di condividerlo. Spero che questo ti aiuti :)


Un po 'tardi per il gioco, ma devi sostanzialmente trattare le tue visualizzazioni in un layout di vincoli come visualizzazioni regolari che hanno semplicemente i propri LayoutParam.

Nel caso di ConstraintLayout, la documentazione si trova qui: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.LayoutParams.html

Questa classe contiene i diversi attributi che specificano come una vista deve essere strutturata all'interno di ConstraintLayout. Per creare vincoli in fase di esecuzione, si consiglia di utilizzare ConstraintSet.

Quindi, il metodo consigliato è usare un ConstraintSet .

C'è un buon esempio di codice, ma il concetto base è che devi creare un nuovo set (copiando / clonando / nuovo, ecc.), Impostane le proprietà e quindi applicalo al tuo layout.

Es: Supponiamo che il tuo layout contenga un ConstraintLayout (chiamato mConstraintLayout qui) e al suo interno contenga una vista (R.id.go_button nell'esempio), potresti fare:

    ConstraintSet set = new ConstraintSet();

    // You may want (optional) to start with the existing constraint,
    // so uncomment this.
    // set.clone(mConstraintLayout); 

    // Resize to 100dp
    set.constrainHeight(R.id.go_button, (int)(100 * density));
    set.constrainWidth(R.id.go_button, (int)(100 * density));

    // center horizontally in the container
    set.centerHorizontally(R.id.go_button, R.id.rootLayout);

    // pin to the bottom of the container
    set.connect(R.id.go_button, BOTTOM, R.id.rootLayout, BOTTOM, 8);

    // Apply the changes
    set.applyTo(mConstraintLayout); 
    // this is my… (ConstraintLayout) findViewById(R.id.rootLayout);




android-layout