2016-11-09 2 views
1

У меня есть LinearLayout с заголовком TextView сверху, а затем ListView, который содержит TextViews. Это рядом с другим аналогичным LinearLayout, в котором есть GridView.ListView с TextView только передает текст, который обертывает

Текстовые объекты в ListView не будут центрироваться, если текст не обернется из-за того, что он длинный.

Я использовал их в центре, когда я использовал ширину ListView, но имел другой побочный эффект, который заключался в том, что текст был обрезан на обоих концах длинных строк, даже если он был завернут. Просто не обернулся. Поэтому я исправил это, переместив жесткую кодированную ширину до охватывающего LinearLayout, но теперь у вас есть эта проблема.

Интересно отметить, что мой аналогичный GridView, похоже, не имеет проблемы, хотя он также имеет «фона, пригодный для рисования», который представляет собой прямоугольник с закругленными углами.

раскладка:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="3"> 

    <LinearLayout 
     android:id="@+id/course_part" 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="@string/course" 
      android:textSize="@dimen/text_course_title" 
      android:textColor="#ff000000" 
      android:textStyle="bold" /> 

     <ListView 
      android:id="@+id/listview_course" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center"/> 
    </LinearLayout> 

И TextView, что населяет ListView является:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/list_item_mark_name_name" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:fontFamily="Roboto" 
     android:textAlignment="center" 
     android:text="name" 
     android:textColor="#ff000000" 
     android:textSize="@dimen/text_course_grid" 
     android:textStyle="bold" 
     android:typeface="monospace" 
/> 

И я должен отметить, что я динамически изменять размер шрифта в моей ArrayAdapter «GetView» на основе длина текста:

// First shrink it's size to better fit. 
    float textSize = 30; // In DP units. 
    int nameLength = mark.name.length(); 
    if (nameLength > 4) 
    { 
     if (nameLength <= 8) 
      textSize *= 4.0f/nameLength; // Up to 8, proportionally shrink it. 
     else 
      textSize *= 0.5f;    // After 8, leave it at half size. 
    } 

    holder.textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize); 
    holder.textView.setMinHeight(this.textViewPixels); 
    holder.textView.setText(mark.name); // Set it's name. 
    holder.textView.setTextColor(appData.getNightMode() ? Color.WHITE : Color.BLACK); // Just added it. Set it's color properly. 

Я пробовал гравитацию = "центр" nt = "center", и оба они ведут себя одинаково.

Я пробовал различные сочетания match_parent и fill_parent на различных содержащих представления/макеты с обычно плохими результатами, и если я не затрудняю ширину, то получаю либо слишком много места, либо очень тонкий бесполезный столбец.

Спасибо!

+0

try android: gravity = "center_horizontal" –

+0

Пробовал. Нет радости. –

ответ

0

Я нашел обходное решение: только что изменил прилагаемый LinearLayout к RelativeLayout.

Почему это работает - хороший вопрос. Пахнет как ошибка в библиотеках.

Итак, вот мой обновленный макет, немного изменившийся, чтобы получить название TextView в центре. Нет изменений в TextView, используемых в ListView.

<RelativeLayout 
     android:id="@+id/course_part" 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/course_course_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="@string/course" 
      android:gravity="center" 
      android:textSize="@dimen/text_course_title" 
      android:textColor="#ff000000" 
      android:textStyle="bold" /> 

     <ListView 
      android:id="@+id/listview_course" 
      android:layout_below="@id/course_course_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center"/> 
    </RelativeLayout> 
Смежные вопросы