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 Views that you’ve added to the ConstraintLayout. You should be doing something like this instead:
b1.setLayoutParams(l1); b2.setLayoutParams(l2);
