代码之家  ›  专栏  ›  技术社区  ›  K.Wu

在Android中,使用ConstraintSet以编程方式向视图添加约束不会产生预期的结果?

  •  1
  • K.Wu  · 技术社区  · 7 年前

    我有一个自定义的ConstraintLayout,里面有一个文本视图。我正在以编程的方式做每件事 总之,代码如下:

    public class CustomView extends ConstraintLayout {
        private TextView textView;
    
        public CustomView(Context context) {
            super(context);
    
            textView = new TextView(context);
            textView.setId(View.generateViewId());
            textView.setText("...");
    
            // Adding border to the view in order to visualize the frame
            GradientDrawable border = new GradientDrawable();
            border.setColor(Color.TRANSPARENT);
            border.setStroke(1, Color.BLACK);
            textView.setBackground(border);
            addView(textView);
    
            // Apply constraints to textView. Left = right = top = bottom = 120
    
            ConstraintSet set = new ConstraintSet();
            set.clone(this);
            set.connect(textView.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 120);
            set.connect(textView.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 120);
            set.connect(textView.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 120);
            set.connect(textView.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 120);
            set.applyTo(this);
        }
    }
    

    1. 如果textView中的文本较短:

    enter image description here

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   Vadim Eksler    7 年前

    如果我能纠正你的错误结果-你看不到边际? 我认为这是因为违约 layout_width layout_height 您的文本视图-包装内容。默认值必须是 0dp 试试看:

    LayoutParams lp = new LayoutParams(0, 0);
    textView.setLayoutParams(lp);