2

У меня проблема с чем-то, что «должно» работать, но это просто не так.TextView не сглаживает линию правильно

TextView внутри TableRow не обеспечивает разрыв строки, где он должен, вместо этого же TextView имеет ту же ширину, как TableRow, не обращая внимания, что один TextView уже есть и принимая какое-то пространство.

Вот пример:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" 
     android:orientation="vertical" 
     android:weightSum="1" > 

     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="0px" 
      android:layout_weight="0.4" 
      android:scrollbars="vertical" > 

      <TableLayout 
       android:id="@+id/tableAtTest" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TableRow 
        android:id="@+id/firstContainer" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:padding="2dp" > 

        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_margin="3dp" 
         android:gravity="center_vertical" 
         android:text="first description" 
         android:textColor="#000000" 
         android:textSize="@dimen/smallSize" 
         android:textStyle="bold" /> 

        <TextView 
         android:id="@+id/firstText" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_margin="3dp" 
         android:text="test test test test test test test test test test test test test test test test test test test test test test " 
         android:textColor="#000000" 
         android:textSize="@dimen/smallSize" /> 
       </TableRow> 

       <TableRow 
        android:id="@+id/secondContainer" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:padding="2dp" > 

        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_margin="3dp" 
         android:gravity="center_vertical" 
         android:text="second description" 
         android:textColor="#000000" 
         android:textSize="@dimen/smallSize" 
         android:textStyle="bold" /> 

        <TextView 
         android:id="@+id/secondText" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_margin="3dp" 
         android:text="test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 test2 " 
         android:textColor="#000000" 
         android:textSize="@dimen/smallSize" /> 
       </TableRow> 
      </TableLayout> 
     </ScrollView> 

     <android.support.v4.view.ViewPager 
      xmlns:tools="http://schemas.android.com/tools" 
      android:id="@+id/pagerOnTest" 
      android:layout_width="match_parent" 
      android:layout_height="0px" 
      android:layout_weight="0.6" 
      tools:context=".TestActivity" > 
     </android.support.v4.view.ViewPager> 
    </LinearLayout> 
</RelativeLayout> 

Если вы посмотрите на ширину полей, принятых @id/firstText и @id/secondText вы увидите, что правая сторона TextView находится за пределами экрана.

Любая помощь будет оценена по этому поводу. Благодаря!

+0

вам не нужно использовать новую строку, просто отформатируйте текстовые изображения в соответствии с моим ответом. –

ответ

1

Это должно работать для вас, используя сумму веса и веса компоновки и установки ширины таблицы в соответствии родителю и ширину TextView в 0dp, так что это будет динамически оказывать:

<TableLayout 
    android:id="@+id/tableAtTest" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:weightSum="2"> 

    <TableRow 
     android:id="@+id/firstContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="2dp"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_margin="3dp" 
      android:gravity="center_vertical" 
      android:text="first description" 
      android:textColor="#000000" 
      android:textStyle="bold" 
      android:layout_weight="1"/> 

     <TextView 
      android:id="@+id/firstText" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_margin="3dp" 
      android:text="test test test test test test test test test test test test test test test test test test test test test test " 
      android:textColor="#000000" 
      android:layout_weight="1" /> 

    </TableRow> 

</TableLayout> 

split text image

+0

Я вынул свой размер текста, чтобы проверить свой код. –

+1

Я только что добавил layout_weight от 1 до правого столбца, и он работал как шарм. Спасибо, что указал мне в правильном направлении. Я потратил слишком много времени на это ты :) Приветствия! – Matjaz

0

Используйте \n, чтобы заставить разрыв строки

так:

android:text="test test test test\ntest test test test test test test\ntest test test test test test\ntest test test test test" 

не проверял его сейчас, но он должен работать

... если вы хотите, чтобы он динамически попробовать :

android:scrollHorizontally="false" 

на текстовом изображении .... но я не пробовал

+0

Это может быть решение, но не очень приятно при динамическом добавлении текста. Я не знаю, что мне нужно показать, но если вы учитываете разные плотности, настройки размера текстового текста, размеры экрана и т. Д., Вы обнаружите, что должно быть что-то еще, что я пропустил, чтобы достичь правильной линии ломка. – Matjaz

0

\n будет работать, но если вам это нужно динамически, то вы думаете, что текст должен иметь определенное выравнивание (оправданное). Невозможно обосновать текст на Android без сторонних библиотек.

Я нашел некоторые библиотеки Github некоторое время назад, here и here.

1

Вам необходимо добавить внутренний контейнер к вашему TableRow. TextViews не будут взаимодействовать друг с другом, если не указано в вашем макете.

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

android:layout_toRightOf="@+id/firstText" 
+0

Мне нужны две колонки, а левая сторона не может быть установлена ​​с весом или обертыванием. Вес может вырезать текст на немецком языке (слова looong), и обертка не выравнивает правый столбец, поскольку он прикреплен к левому краю, где заканчивается один. Или, если я ошибаюсь в понимании вашего ответа, не могли бы вы привести один пример? – Matjaz

+0

Что вы будете делать, если оба столбца содержат действительно длинные слова? Возможно, я не совсем понимаю, какой макет вы пытаетесь достичь. – dharms

+0

План состоит в том, чтобы использовать короткие (например, «имя», «описание», «местоположение» и т. Д.) С левой стороны и более длинные (фактические значения) с правой стороны. Что-то вроде таблицы ключей/значений. Я пробовал много разных попыток, но просто пока не нашел хорошего решения. Это может быть один из родительских макетов, которые отвечают за такое поведение, но я сомневаюсь, потому что, если вы выберете TableRow в студии Android, вы увидите, что он правильный. – Matjaz