我正在try 使用Mainactivity.java创建约束布局,但我遇到了一些问题.我拿到了下面的yields .

enter image description here

约束布局与父级的大小不匹配.

我已经创建了两个类,一个是MainActivity.java,另一个是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);
    }
}

没有任何XML文件.

先谢谢你

推荐答案

您是在ConstraintLayout上呼叫setLayoutParams(),而不是在您添加到ConstraintLayout上的子View上呼叫.相反,你应该做这样的事情:

b1.setLayoutParams(l1);
b2.setLayoutParams(l2);

Java相关问答推荐

如何使用Spring Data从MongoDB文档中包含的数组中 Select 单个元素?

一般类型和kotlin阴影Java函数的问题

我的scala文件失败了Scala.g4 ANTLR语法

如何在SystemiccationRetryListenerSupport中获得类级别的spring retryable annotation中指定的标签?

Intellij显示项目语言级别最高为12,尽管有java版本17 SDK

是否在允许数组元素为空时阻止 idea 为空性警告?

Java中的死锁及其重入锁和锁

为什么在maven中,getLast方法不适用于List?

Java流传输一个列表并创建单个对象

如何在Java记录中设置BigDecimal类型属性的精度?

有没有更快的方法在N个容器中删除重复项?

如何在一行中使用Dijkstra中的Java Stream

如何在JavaFX中制作鼠标透明stage

在macOS上读取文件会导致FileNotFound,即使文件存在(并且具有权限)

如何生成指定范围内的11位序列号?

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

如何处理两个几乎相同的XSD文件?

JavaFX标签中的奇怪字符

如何使用stream.allMatch()为空流返回false?

Spring Mapstruct如何获取Lazy初始化实体字段的信息?