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;
}