I am trying to create constraint layout using Mainactivity.java but I am facing some problems. I’m getting the below output.
The constraint layout isn’t matching the size of parent.
I have created 2 classes 1 is MainActivity.java
and another is MyConstraintLayout.Java
MyconstraintLayout.java
package com.example.checkbox; import android.content.Context; import android.view.ViewGroup; import android.widget.Button; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; public class MyConstraintLayout extends ConstraintLayout { public MyConstraintLayout(@NonNull Context context) { super(context); setId(generateViewId()); ViewGroup.LayoutParams layout = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); setLayoutParams(layout); setBackgroundColor(getResources().getColor(R.color.teal_200)); createWidgets(context); } void createWidgets(Context context){ ConstraintLayout.LayoutParams l1 = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); Button b1 = new Button(context); b1.setText("Button"); b1.setId(generateViewId()); addView(b1); setLayoutParams(l1); ConstraintLayout.LayoutParams l2 = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); Button b2 = new Button(context); b2.setText("Button"); b2.setId(generateViewId()); addView(b2); setLayoutParams(l2); l1.bottomToBottom = getId(); l1.topToTop = getId(); l1.endToEnd= getId(); l1.startToStart = getId(); l2.bottomToBottom = getId(); l2.topToBottom = b1.getId(); l2.endToEnd= getId(); l2.startToStart = getId(); } }
MainActivity.java
package com.example.checkbox; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.app.Activity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyConstraintLayout parent_layout = new MyConstraintLayout(this); setContentView(parent_layout); } }
Don’t have any XML file.
Thank you in advance
Advertisement
Answer
You are calling setLayoutParams()
on the ConstraintLayout
and not on the child View
s that you’ve added to the ConstraintLayout
. You should be doing something like this instead:
b1.setLayoutParams(l1); b2.setLayoutParams(l2);