0
我在ConstraintLayout中有一个TextView,它漂浮在图像上,并且样式看起来像一个徽章。文本视图使用wrap_content
,有时有2个字母,有时是3.有时需要更新TextView。发生这种情况时,TextView的容器不会动态调整大小。这意味着如果新文本是2个之前的3个字符,它现在看起来太大了,如果它是2个字符,当它是3时,它会剪切文本。ConstraintLayout中的Textview没有调整大小
我怎样才能让TextView适当调整大小?在问题
TextView的被称为@id/attendance
i中的布局:其中视图膨胀和分配的代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/image_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<com.pkmmte.view.CircularImageView
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginBottom="1dp"
tools:background="@color/accent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/first_name"
app:border="true"
app:border_color="@color/dark_gray"
app:border_width="2dp"
app:shadow="false" />
<TextView
android:id="@+id/attendance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginLeft="40dp"
android:minWidth="15dp"
android:maxWidth="50dp"
android:minHeight="20dp"
android:maxHeight="20dp"
android:padding="12dp"
tools:text="100"
app:layout_constraintStart_toStartOf="@id/image"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/image"
app:layout_goneMarginTop="20dp"
tools:background="@color/green_complete"
android:shadowColor="@color/black"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/first_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="end"
android:maxLines="1"
tools:text="Suzie"
app:layout_constraintStart_toStartOf="@id/image"
app:layout_constraintEnd_toEndOf="@id/image"
app:layout_constraintTop_toBottomOf="@id/image"
app:layout_constraintBottom_toTopOf="@+id/last_name"
android:layout_marginTop="2dp"
android:textColor="@color/white"
android:textSize="12sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/last_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="4dp"
app:layout_constraintTop_toBottomOf="@id/first_name"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/image"
app:layout_constraintEnd_toEndOf="@id/image"
android:ellipsize="end"
android:maxLines="1"
tools:text="Cue"
android:textColor="@color/white"
android:textSize="12sp"
/>
</android.support.constraint.ConstraintLayout>
节。这是在视图首次创建时以及更新时调用的。问题TextView是被gradeText
public View getView(View existingView, final StudentAssignmentGrade item) {
final StudentGrade grade = item.getGrade();
final ViewHolder holder;
if (existingView == null) {
holder = new ViewHolder();
existingView = inflater.inflate(R.layout.student_view_grading, staggeredGridView, false);
holder.firstNameText = (TextView) existingView.findViewById(R.id.first_name);
holder.lastNameText = (TextView) existingView.findViewById(R.id.last_name);
holder.studentImage = (CircularImageView) existingView.findViewById(R.id.image);
//This is the textView
holder.gradeText = (TextView) existingView.findViewById(R.id.attendance);
existingView.setTag(holder);
} else {
holder = (ViewHolder) existingView.getTag();
}
//set other TextViews
if (item.getGrade().getMark() != null) {
holder.gradeText.setVisibility(View.VISIBLE);
String formattedMark = "";
if(grade.getMark() != null)
formattedMark = grade.getMark().replaceAll("\\..*$", "");
if(formattedMark.isEmpty())
formattedMark = "?";
holder.gradeText.setText(" " + formattedMark + " ");
holder.studentImage.setBorderColor(mContext.getResources().getColor(R.color.white));
holder.studentImage.setBorderWidth(2);
} else {
holder.gradeText.setVisibility(View.GONE);
holder.studentImage.setBorderColor(mContext.getResources().getColor(R.color.dark_gray));
holder.studentImage.setBorderWidth(2);
}
CourseGradeDisplay.PerformanceLevel performanceLevel = null;
float gradePercent = item.getGrade().getPercentageEarned();
final CourseGradeDisplay gradeDisplay = courseGradeDisplays.get(item.getCourseId());
if(gradeDisplay != null && gradePercent >= 0.0f) {
for (CourseGradeDisplay.PerformanceLevel level : gradeDisplay.getPerformanceLevels()) {
if (gradePercent >= level.getMinRange() && gradePercent <= level.getMaxRange()) {
performanceLevel = level;
break;
}
}
}
int iconColor = R.color.black;
if(performanceLevel != null) {
switch (performanceLevel.getColor()) {
case 4: iconColor = R.color.grade_output_blue; break;
case 3: iconColor = R.color.grade_output_green; break;
case 2: iconColor = R.color.grade_output_yellow; break;
case 1: iconColor = R.color.grade_output_red; break;
default: iconColor = R.color.black;
}
}
//set icon and color
Drawable iconDrawable = mContext.getResources().getDrawable(R.drawable.round_corner_bg);
iconDrawable.setColorFilter(new
PorterDuffColorFilter(mContext.getResources().getColor(iconColor), PorterDuff.Mode.MULTIPLY));
holder.gradeText.setBackgroundDrawable(iconDrawable);
holder.studentImage.setOnLongClickListener(new View.OnLongClickListener() {
...
});
try {
// .. set more listeners ...
}
return existingView;
}