Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未应用于我的文本视图的约束_Android_Android Layout - Fatal编程技术网

Android 未应用于我的文本视图的约束

Android 未应用于我的文本视图的约束,android,android-layout,Android,Android Layout,这里我有一些代码,可以通过编程方式向ConstraintLayout添加一些元素 public void AddCategory(final String label, String img){ final float scale = getResources().getDisplayMetrics().density; //Create a new constraint layout ConstraintLayout constraintLa

这里我有一些代码,可以通过编程方式向ConstraintLayout添加一些元素

 public void AddCategory(final String label, String img){
        final float scale = getResources().getDisplayMetrics().density;

        //Create a new constraint layout
        ConstraintLayout constraintLayout = new ConstraintLayout(getContext());
        servicesLayout.addView(constraintLayout);
        constraintLayout.setId(View.generateViewId());
        android.support.v7.widget.GridLayout.LayoutParams layoutParams = new android.support.v7.widget.GridLayout.LayoutParams(android.support.v7.widget.GridLayout.spec(android.support.v7.widget.GridLayout.UNDEFINED, 1f), android.support.v7.widget.GridLayout.spec(android.support.v7.widget.GridLayout.UNDEFINED, 1f));
        layoutParams.width = 0;
        layoutParams.height = (int) scale * 200;
        layoutParams.setMargins((int) scale * 15,(int) scale * 15,(int) scale * 15,(int) scale * 15);
        constraintLayout.setLayoutParams(layoutParams);
        constraintLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimary));

        //Place ImageView in layout
        ImageView imageView = new ImageView(getContext());
        constraintLayout.addView(imageView);
        imageView.setId(View.generateViewId());
        ConstraintSet constraintSet = new ConstraintSet();
        constraintSet.connect(imageView.getId(), ConstraintSet.TOP, constraintLayout.getId(), ConstraintSet.TOP);
        constraintSet.connect(imageView.getId(), ConstraintSet.BOTTOM, constraintLayout.getId(), ConstraintSet.BOTTOM);
        constraintSet.connect(imageView.getId(), ConstraintSet.LEFT, constraintLayout.getId(), ConstraintSet.LEFT);
        constraintSet.connect(imageView.getId(), ConstraintSet.RIGHT, constraintLayout.getId(), ConstraintSet.RIGHT);
        constraintSet.applyTo(constraintLayout);
        if (getContext() != null){
            GlideApp.with(this)
                    .load(img)
                    .centerCrop()
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .placeholder(R.color.colorGray)
                    .error(R.drawable.title)
                    .into(imageView);
        }

        //Place label background
        ImageView captionImageView = new ImageView(getContext());
        constraintLayout.addView(captionImageView);
        captionImageView.setId(View.generateViewId());
        ConstraintSet captionConstraintSet = new ConstraintSet();
        captionConstraintSet.connect(captionImageView.getId(), ConstraintSet.BOTTOM, constraintLayout.getId(), ConstraintSet.BOTTOM);
        captionConstraintSet.connect(captionImageView.getId(), ConstraintSet.LEFT, constraintLayout.getId(), ConstraintSet.LEFT);
        captionConstraintSet.connect(captionImageView.getId(), ConstraintSet.RIGHT, constraintLayout.getId(), ConstraintSet.RIGHT);
        captionConstraintSet.applyTo(constraintLayout);
        captionImageView.getLayoutParams().width = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT;
        captionImageView.getLayoutParams().height  = (int) scale * 50;
        captionImageView.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
        captionImageView.setAlpha(0.7f);

        //Place text in front of the label backgroudn
        TextView textView = new TextView(getContext());
        constraintLayout.addView(textView);
        textView.setId(View.generateViewId());
        ConstraintSet labelConstraintSet = new ConstraintSet();
        labelConstraintSet.connect(textView.getId(), ConstraintSet.BOTTOM, captionImageView.getId(), ConstraintSet.BOTTOM);
        labelConstraintSet.connect(textView.getId(), ConstraintSet.LEFT, captionImageView.getId(), ConstraintSet.LEFT);
        labelConstraintSet.connect(textView.getId(), ConstraintSet.RIGHT, captionImageView.getId(), ConstraintSet.RIGHT);
        labelConstraintSet.applyTo(constraintLayout);
        textView.getLayoutParams().width = ConstraintLayout.LayoutParams.WRAP_CONTENT;
        textView.getLayoutParams().height  = ConstraintLayout.LayoutParams.WRAP_CONTENT;
        textView.setTextColor(getResources().getColor(R.color.colorWhite));
        textView.setText(label);
}

前3个代码块工作得很好:以编程方式添加一个ConstraintLayout和两个ImageView。问题在于试图约束TextView元素。当试图将其约束到需要的某个ImageView时,它根本不起作用。将其约束到ConstraintLayout时,它将起作用,但这是不可取的。相反,它将忽略所有constraintSet.connect代码,并将其放置在布局的默认右上角位置,如图所示


更改TextView的constraintSet的endId,如下所示:-

ConstraintSet labelConstraintSet = new ConstraintSet();
    labelConstraintSet.connect(textView.getId(), ConstraintSet.BOTTOM, constraintLayout.getId(), ConstraintSet.BOTTOM,(int)scale*15);
    labelConstraintSet.connect(textView.getId(), ConstraintSet.LEFT, constraintLayout.getId(), ConstraintSet.LEFT);
    labelConstraintSet.connect(textView.getId(), ConstraintSet.RIGHT, constraintLayout.getId(), ConstraintSet.RIGHT);

“当将其约束到ConstraintLayout时,它会工作,但这是不可取的。”该代码实际上会将其带到底部,但它位于布局的底部,不在透明的ImageView中居中。它不使用设置为captionImageView的约束,因此我给出了边距(int)缩放*15到底部约束,约束设置为CONSTRAINTLAOUT。我知道这是一个黑客,但它看起来在中心。正确。我试过了。它看起来像中心,但不是我想要的。谢谢你!