2014-02-14 3 views
16

У меня есть два TextViews мне нужно положить бок о бок в макете, и я должен соблюдать два правила:Положите две TextViews бок о бок в макете

  • Textview2 нуждается всегда будет отображаться полностью.

  • Textview1 необходимо обрезать, если в макете недостаточно места.

Примеры:

Textview1 | textview2

Teeeeeeeeeeeeeeeeeeeextview1 ... | textview2

Любые идеи?

Единственный способ, которым я мог найти работу, это создать чертеж с текстом textview2 и повлиять на него как coumpoundDrawable на textview1.

+0

does textview1 нужно настроить пространство для распространения текстовых просмотров, чтобы охватить ширину тоже? в случае, если оба текстовых изображения не заполняют всю ширину. – user2450263

+0

Опубликуйте XML с выходом, чтобы мы могли редактировать ... –

ответ

39

Wrap два TextViews в LinearLayout. Назначьте вес макета от 0 до textview2 и вес макета от 1 до textview2.

Смотрите здесь для получения дополнительной информации: Linear Layout Weight

Если вы играете на примере ниже вы увидите, что LinearLayout первый выделяет пространство для textview2 (с весом 0), а затем выделяет все, что остается textview1 (с весом 1). Если для размещения обоих текстовых объектов недостаточно места, textview1 будет сначала эллипсовым. В приведенном ниже примере textview2 будет только когда-либо становиться эллипсисом, если LinearLayout меньше размера самого textview2. Назначьте определенную ширину макета для FrameLayout и посмотрите, что произойдет.

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="200dp" 
    android:layout_height="match_parent" 
    android:background="#FF0000FF"> 

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

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:background="#FFFF0000" 
      android:ellipsize="end" 
      android:maxLines="1" 
      android:text="textview1" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="0" 
      android:background="#FF00FF00" 
      android:ellipsize="end" 
      android:maxLines="1" 
      android:text="textview2" /> 
    </LinearLayout> 

</FrameLayout> 
+0

+1 Я собирался опубликовать то же самое. – Doomsknight

+0

Да, но проблема с весами в том, что между текстовыми изображениями могут быть дополнительные пробелы. Я бы хотел, чтобы textview1 занимал только пространство, необходимое для отображения его текста. – Esteam

+0

Каково родительское представление, в котором вы планируете размещать TextViews? – Dean

2

Зачем вам это требуется? Будет ли изменить свой ответ, если его обязательным, в противном случае вы можете использовать textview1 с фиксированной шириной и ellipsize конца ..:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:id="@+id/textview1" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:lines="1" 
     android:padding="2dp" /> 


    <TextView 
     android:id="@+id/textview2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/textview1" 
     android:padding="2dp" /> 

</RelativeLayout> 
+0

Я также подумал об этом решении, но я хотел использовать его в качестве последнего средства, потому что мне не нравится использовать фиксированную ширину для макетов. Мне всегда трудно определить правильную ширину, которая будет идеально отображаться при каждом размере и плотности экрана. – Esteam

+0

@Esteam: вы всегда можете использовать «100dp» от размеров, указав его таким образом, чтобы в определенной степени уменьшить проблему с шириной. http://developer.android.com/guide/topics/resources/more-resources.html#Dimension – user2450263

0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="right" 
    android:orientation="horizontal" > 

    <View 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:color/holo_green_light" 
     android:singleLine="true" 
     android:text="textView1" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:color/holo_blue_light" 
     android:singleLine="true" 
     android:text="textView2" /> 

</LinearLayout> 

Edit:

Выход для короткого текста textView1:

enter image description here

Выход для длинного текста textView1:

enter image description here

+0

Как я писал в Dean, я хотел бы, чтобы textView1 занимал только пространство, необходимое для отображения его текста, никаких лишних пробелов между textView1 и textView2 – Esteam

+0

@Esteam, я обновил свой ответ, как вы описали в своем комментарии – Devrim

+0

Спасибо, но теперь есть дополнительные пробелы слева от textview1 – Esteam

Смежные вопросы