андроид, как заставить textview "расти" справа? - PullRequest
0 голосов
/ 13 июля 2011

Я хотел бы создать подобный сообщениям пользовательский интерфейс. Я создаю представление списка с двумя типами строк: слева и справа. Каждая строка содержит один TextView. Левый используется для отображения сообщения отправителя, а правый - для отображения сообщения текущего пользователя.
Я хотел бы, чтобы TextView в правой строке занимал определенный процент экрана, выравнивал текст по левому краю, но динамически увеличивался с содержимым.
Чтобы уточнить, вот изображение того, чего я хотел бы достичь: http://dl.dropbox.com/u/2482095/wanted.png
Синие строки - это «левые» строки, черные - «правые».
Чтобы добиться этого, я использовал различные комбинации LinearLayout и RelativeLayout с пустым представлением, размещенным слева, и желаемым textView, размещенным справа. Что я получаю, я что-то вроде этого, а это не то, что я хочу: http://dl.dropbox.com/u/2482095/notWanted1.png (текст всегда начинается с точной точки)
Мне также удалось установить гравитацию: вправо, что выравнивает текст вправо, что тоже не то, что я хотел.

Есть ли способ заставить TextView расти вместе с его содержимым?

[править] Мой xml-файл выглядит примерно так:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:padding="5dp">
        <View android:id="@+id/emptyView"
           android:layout_width="80dp"
           android:layout_height="wrap_content"
           android:layout_weight="1" />
        <TextView android:id="@+id/messageBody"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
    </LinearLayout>

Ответы [ 3 ]

1 голос
/ 13 июля 2011

Вы должны установить layout_width = "wrap_content" в вашем TextView и layout_weight = "1" в вашем пустом представлении.Таким образом, TextView должен быть настолько широким, насколько это необходимо, и дополнительное пространство будет занимать ваше пустое представление.

0 голосов
/ 17 июля 2011

По сути, вы хотите, чтобы текст был выровнен по правому краю, если он умещался в одну строку, и выровнен по левому краю в противном случае.

Для измерения ширины текста используйте метод Paint.measureText().Таким образом, вы можете использовать что-то вроде этого для просмотра:

Paint paint = new Paint(view.getPaint());
LayoutParams params = view.getLayoutParams();       

int availableWidth = params.width - view.getPaddingLeft() - view.getPaddingRight();

int textWidth = (int) Math.ceil(paint.measureText(view.getText().toString()));

if(textWidth <= availableWidth) {
    view.setGravity(Gravity.RIGHT);
} 
else {
    view.setGravity(Gravity.LEFT);
}
0 голосов
/ 13 июля 2011

Да, ваш взгляд (любой вид) wrap_content. Это позволит представлению стать настолько большим, насколько позволит его родитель. Если ваш родитель оставляет только определенное пространство для вашего обзора, ребенок никогда не станет больше. Нет, родитель также ограничен его родителем и т. Д.

...