大家好,我是个流血的初学者,需要帮助

我必须在Android Studio的编辑器中构建一个带有5个文本视图的ContraintLAyout,现在我需要动态地将此ContraintLayout映射42次。因此,我花了一段时间寻找解决方案,然后发现了可以解决问题的方法。但是结果不是预期的。

<TextView
                android:id="@+id/textView"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:gravity="center"
                android:text="MO"
                app:autoSizeTextType="uniform"
                app:layout_constraintBottom_toTopOf="@+id/textView4"
                app:layout_constraintEnd_toStartOf="@+id/textView2"
                app:layout_constraintHeight_default="percent"
                app:layout_constraintHeight_percent="0.34"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintWidth_default="percent"
                app:layout_constraintWidth_percent="0.34" />

如何在Java代码上设置这些值?

我已经尝试过这样的事情

GridLayout gridLayout = findViewById(R.id.kalenderfeldGL);
        ConstraintLayout tagesfeld = (ConstraintLayout) gridLayout.getChildAt(0);
        tagesfeld.setId(View.generateViewId());
        TextView tagname = new TextView(this);
        tagname.setId(View.generateViewId());
        //tagname.setHeight(0);
        //tagname.setWidth(0);
        ConstraintLayout.LayoutParams cltagesfele = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_CONSTRAINT_PERCENT, ConstraintLayout.LayoutParams.MATCH_CONSTRAINT_PERCENT);
        tagname.setLayoutParams(cltagesfele);
        //tagname.setText("MO");
        TextViewCompat.setAutoSizeTextTypeWithDefaults(tagname, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
        tagname.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
        tagname.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        //tagname.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);



        //tagname.setText("MO");
        tagesfeld.addView(tagname);
        ConstraintSet cstagname = new ConstraintSet();
        //cstagname.clone(tagesfeld);
        cstagname.connect(tagname.getId(), ConstraintSet.TOP, tagesfeld.getId(), ConstraintSet.TOP, 0);
        cstagname.connect(tagname.getId(), ConstraintSet.START, tagesfeld.getId(), ConstraintSet.START, 0);
        cstagname.constrainPercentHeight(tagname.getId(), 0.34F);
        cstagname.constrainPercentWidth(tagname.getId(), 0.34F);
        cstagname.applyTo(tagesfeld);
        tagname.setText("MO");

我希望左上角的"MO"字母可以正常工作,但是这些字母不是并排放置的,它们处于垂直位置,并且O的底边被切掉了。

分析解答

尝试将textView的最大行数限制设置为1,以防止"O"字母进入下一行。如下所示:

tagname.setMaxLines(1);

更新:

尝试使用以下方法减小autoSizeTextType的最小文本大小:

xml:

android:autoSizeMinTextSize="10sp"

Java:

tagname.setAutoSizeTextTypeUniformWithConfiguration(10, 100, 1, TypedValue.COMPLEX_UNIT_DIP);

Android文档中所述,默认值为12sp