2017-08-28 217 views
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; 
     } 

回答