私はConstraintLayout内にTextViewを置いてイメージ上に浮かべ、バッジのように見えるようにしました。テキストビューにはwrap_content
が使用され、時には2文字、時には3文字があります。TextViewを更新する必要があることがあります。この場合、TextViewのコンテナは動的にサイズ変更されません。つまり、新しいテキストが前の2文字のときに3文字だった場合、それは大きすぎるように見え、3文字のときは2文字になります。ConstraintLayoutのテキストビューはリサイズされません
TextViewのサイズを適切に変更する方法を教えてください。ビューが膨張し、割り当てられているコードの
<?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は@id/attendance
私レイアウトと呼ばれています。これは、ビューが最初に作成され、更新されたときに呼び出されます。問題の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;
}