Necesito ayuda con ConstraintSet
. Mi objetivo es cambiar las restricciones de la vista en el código, pero no puedo averiguar cómo hacerlo bien.
Tengo 4 TextView
sy uno ImageView
. Necesito establecer ImageView
restricciones a una de las TextView
s.
check_answer4 = (TextView) findViewById(R.id.check_answer4);
check_answer1 = (TextView) findViewById(R.id.check_answer1);
check_answer2 = (TextView) findViewById(R.id.check_answer2);
check_answer3 = (TextView) findViewById(R.id.check_answer3);
correct_answer_icon = (ImageView) findViewById(R.id.correct_answer_icon);
Si la primera respuesta es correcta, necesito establecer restricciones de ImageView
a
app:layout_constraintRight_toRightOf="@+id/check_answer1"
app:layout_constraintTop_toTopOf="@+id/check_answer1"
Si la segunda respuesta es correcta, necesito establecer restricciones de ImageView
a
app:layout_constraintRight_toRightOf="@+id/check_answer2"
app:layout_constraintTop_toTopOf="@+id/check_answer2"
Y así.
android
android-layout
android-view
android-constraintlayout
Gran entrenador
fuente
fuente
Respuestas:
Para establecer las limitaciones de la vista de imágenes a:
utilizar:
Para establecer las limitaciones de la vista de imágenes a:
utilizar:
fuente
.clone(constraintLayout)
¿Qué es esta variable y de dónde la obtengo?ConstraintLayout constraintLayout = findViewById(R.id.parent_layout);
Supongamos que queremos cambiar las restricciones durante el tiempo de ejecución, haciendo que button1 se alinee con button2 cuando se hace clic:
Entonces, teniendo este diseño:
Podemos hacer lo siguiente:
fuente
layoutParams
yval
? ¿Es esto incluso Java?ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) button1.getLayoutParams();
button1.requestLayout()
que luego inspeccionará la instancia de laLayoutParams
que hemos mutado.requestLayout()
llamada consetLayoutParams()
y luego funciona. Simplemente mutarlayoutParams
y solicitar el diseño por mí mismo no parece funcionar.En Kotlin, simplemente puede extender la
ConstraintSet
clase y agregar algunos métodos para aprovechar dsl en Kotlin y producir un código más legible. Me gusta estoY úsalo así
fuente
Sé que mi respuesta es muy tardía, pero estoy seguro de que ayudaría mucho a otros que pasen por aquí. Este artículo no es mío, pero hice algunos cambios, dicho esto, deberías esforzarte por consultar el artículo completo aquí.
Conjuntos de restricciones
La clave para trabajar con conjuntos de restricciones en código Java es la clase ConstraintSet. Esta clase contiene una variedad de métodos que permiten tareas como crear, configurar y aplicar restricciones a una instancia de ConstraintLayout. Además, las restricciones actuales para una instancia de ConstraintLayout pueden copiarse en un objeto ConstraintSet y usarse para aplicar las mismas restricciones a otros diseños (con o sin modificaciones).
Se crea una instancia de ConstraintSet como cualquier otro objeto Java:
Una vez que se ha creado un conjunto de restricciones, se pueden llamar métodos en la instancia para realizar una amplia gama de tareas. El siguiente código configura un conjunto de restricciones en el que el lado izquierdo de una vista de botón está conectado al lado derecho de una vista de EditText con un margen de 70 dp:
Aplicación de restricciones a un diseño Una vez configurado el conjunto de restricciones, debe aplicarse a una instancia de ConstraintLayout antes de que surta efecto. Un conjunto de restricciones se aplica mediante una llamada al método applyTo (), pasando a través de una referencia al objeto de diseño al que se aplicarán las configuraciones:
Hay muchas más cosas que puede hacer con la
ConstraintSet
API, configurar el sesgo horizontal y vertical, centrar horizontal y verticalmente, manipular cadenas y mucho más.Muy buena lectura.
Nuevamente, esto es solo una adaptación.
fuente
Además de la respuesta de Azizbekian , permítanme señalar dos cosas:
params.startToEnd = button2.id
params.startToEnd = ConstraintLayout.LayoutParams.UNSET
fuente