大家好,我是个流血的初学者,需要帮助
我必须在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
。