2012-04-25 2 views
1

У меня есть макет, в котором два TextViews, которые будут отображаться на одной и той же линии, таким образом, чтоAndroid: как совместить два вида текста на основе длины текста

Если TextView1 короткий текст, TextView2 должен быть немедленно право к TextView1 (image1) и если TextView1 длинный текст, TextView2 должен быть в правом углу макета на одной и той же линии (iMAGE2)

enter image description here

Как я могу добиться этого?

ответ

0

Используйте макет, как это ..

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

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="38dp" 
     android:layout_toRightOf="@+id/editText1" /> 

</RelativeLayout> 

EditText 1 будет толкать edittext2 его право ... в зависимости от текста в нем ..

+0

Вот что происходит, если TextView1 длинный текст, он толкает TextView2 направо самое, что TextView2 не visible.If TextView1 мало, то TextView2 виден здесь. –

0

Вы можете установить android:maxWidth свойство для первого просмотра текста. Так что ваш макет будет выглядеть следующим образом:

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

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:maxWidth="200dp" 
    android:text="sdfksdofsdfsdfsdfsadfgwagrswargweqrgeqrgqwergeqrgeqrg" 
    /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/textView1" 
    android:text="text2" 
    /> 

+0

Сохранение Hardcoded для maxwidth работает для меня. Но я могу настроить его в соответствии с длиной TextView2. Потому что все устройства не имеют одинаковой ширины. –

0

Edit:

я, видимо, неправильно понял (или не в полной мере чтения) Ваш вопрос. Просто не против моего ответа - я проголосовал за mxy's :)

В прошлый раз, когда у меня была такая же проблема, я не смог найти или отрубить прямое решение. Подсчет пикселей не был вариантом (по крайней мере, не для меня). Но я нашел обходное решение, которое в конечном итоге привело к одной и той же концепции отображения, и это должно было использовать SpannableStringBuilder.

Как я предполагаю, вы хотите два разных TextViews, потому что хотите, чтобы они имели разные цвета (или размер, стиль или шрифт). Идея состоит в том, чтобы использовать единый TextView для всего, и подготовить SpannableString, прежде чем делать setText на вашем представлении.

Используя комбинации ForegroundColorSpan, TextAppearanceSpan и т. Д., Вы можете сделать свой единственный TextView похожим на разные текстовые элементы с разными стилями, сидящими бок о бок, при необходимости переходя к следующей строке.

Ссылки:

Setting font color at runtime

TextAppearanceSpan sample

0

я использую простую горизонтальную LinearLayout с андроида: layout_weight атрибут, и она работала, как вы хотите. Пример:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal"> 

<TextView 
    android:id="@+id/text1" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="teeeeeeeext1"/> 

<TextView 
    android:id="@+id/text2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="text2"/> 
</LinearLayout> 
+0

TextView2 просто придерживается правой границы родительского представления независимо от длины Text1. Даже если длина текста1 мала, text2 придерживается правой границы родительского представления. –

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