Вопрос с оформлением текста в тексте: два текстовых изображения, бок о бок, с различными выравниваниями макета и весами

Я все еще немного Android noob, простите меня, если это просто, и я просто не вижу его.

В представлении есть две части текста, которые охватывают всю ширину по горизонтали, но достигают только одной строки текста. Левая сторона должна всегда отображаться в полном объеме, но не должна занимать больше горизонтального пространства, чем нужно. Правую сторону следует переместить левой стороной и заполнить оставшуюся часть ширины экрана. Если текст правой стороны меньше этой ширины, текст должен быть выровнен по правому краю по горизонтали. Если текст больше ширины, он должен прокручиваться по горизонтали.

Текст с правой стороны будет часто обновляться и должен появляться в новом тексте, когда приложение сообщает об этом (объясняя TextSwitcher в макете).

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

http://img10.imageshack.us/img10/5599/androidlayout.png

Кроме того (но менее важно), в моем коде макета у меня есть андроид: fadingEdge = "none" в TextViews, но при его прокрутке он по-прежнему имеет выцветший край слева и справа. Почему это?

Вот два макета, которые я создал, которые дают результаты, но не результаты, которые я хочу.

Использование горизонтального LinearLayout …

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayoutStatusBar" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="2px" android:background="#555555" > <TextView android:id="@+id/TextViewTimer" android:textSize="18px" android:textColor="#FFFFFF" android:layout_gravity="left" android:layout_weight="0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="0px" android:layout_marginRight="3px" android:text="Left Side" > </TextView> <TextSwitcher android:id="@+id/TextSwitcherDetails" android:inAnimation="@anim/push_up_in" android:outAnimation="@anim/push_up_out" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginLeft="3px" android:layout_marginRight="0px" > <TextView android:id="@+id/TextViewDetails1" android:textSize="18px" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" android:text="Right Side 1" > </TextView> <TextView android:id="@+id/TextViewDetails2" android:textSize="18px" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" android:text="Right Side 2 - This is a really long text this is long and fun and fun and long" > </TextView> </TextSwitcher> </LinearLayout> 

Итак, как мне получить этот текст с правой стороны для выравнивания по правому краю. Благодаря!


РЕДАКТИРОВАТЬ:

Я нашел проблему … Было несколько ошибок. Во-первых, я обнаружил разницу между гравитацией и layout_gravity. Мне нужно было использовать гравитацию для выравнивания текста по правому краю.

Я не могу добавить никаких ссылок, поэтому скопируйте и вставьте ссылку ниже

thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

Тем не менее, это не дало мне точно макет, который я хотел, потому что длинные строки текста будут выровнены по правому краю перед прокруткой, и передняя часть сообщения не может быть прочитана до тех пор, пока она не будет проходить вокруг. То, что мне нужно было сделать, это использовать три «столбца» представлений, при этом вес на среднем (пустом) представлении должен быть «1», а остальные «0», чтобы он максимально удалял самый правый текст до Справа, сохраняя при этом выравнивание по левому краю.

Затем я обнаружил, что ширина TextSwitcher такая же, как у самого большого дочернего TextView. Это проблема при переключении с длинной строки на короткую строку с помощью setText (), потому что средний столбец не будет толкать маленький текст до края. Решение состоит в использовании двух setText () s. Один, чтобы вызвать анимацию с постепенным исчезновением, затем нажмите runnable для запуска после анимации, чтобы снова установить текст, чтобы вызвать анимацию новой строки.

Теперь моя единственная проблема заключается в том, что когда анимация затухания работает на длинной строке текста, если она находится в середине прокрутки, она сбрасывается до положения X = 0 до замирания, поэтому эффект заключается в том, что он прокручивается, перескакивает Исходное положение, затем исчезает. Кто-нибудь знает, как это исправить?

(Я удалил код RelativeLayout выше, поскольку это было неправильно, так как этот пост действительно длинный.)

Вот рабочий код макета …

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayoutStatusBar" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2px" android:background="#333333" > <TextView android:id="@+id/TextViewTimer" android:textSize="18px" android:textColor="#FFFFFF" android:layout_gravity="top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:layout_marginLeft="1px" android:layout_marginRight="4px" android:text="Left Side" > </TextView> <View android:id="@+id/ViewSpacer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" ></View> <TextSwitcher android:id="@+id/TextSwitcherDetails" android:inAnimation="@anim/push_up_in" android:outAnimation="@anim/push_up_out" android:layout_gravity="top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:layout_marginRight="1px" > <TextView android:id="@+id/TextViewDetails1" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" > </TextView> <TextView android:id="@+id/TextViewDetails2" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" > </TextView> </TextSwitcher> </LinearLayout> 

Solutions Collecting From Web of "Вопрос с оформлением текста в тексте: два текстовых изображения, бок о бок, с различными выравниваниями макета и весами"

Я нашел проблему! Было несколько ошибок. Во-первых, я обнаружил разницу между гравитацией и layout_gravity. Мне нужно было использовать гравитацию для выравнивания текста по правому краю.

http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

Тем не менее, это не дало мне точно макет, который я хотел, потому что длинные строки текста будут выровнены по правому краю перед прокруткой, и передняя часть сообщения не может быть прочитана до тех пор, пока она не будет проходить вокруг. То, что мне нужно было сделать, это использовать три «столбца» представлений, при этом вес на среднем (пустом) представлении должен быть «1», а остальные «0», чтобы он максимально удалял самый правый текст до Справа, сохраняя при этом выравнивание по левому краю.

Затем я обнаружил, что ширина TextSwitcher такая же, как у самого большого дочернего TextView. Это проблема при переключении с длинной строки на короткую строку с помощью setText (), потому что средний столбец не будет толкать маленький текст до края. Решение состоит в использовании двух setText () s. Один, чтобы вызвать анимацию с постепенным исчезновением, затем нажмите runnable для запуска после анимации, чтобы снова установить текст, чтобы вызвать анимацию новой строки.

К сожалению, горизонтальная прокрутка текста выглядит ужасно, когда текст переключается каждые пять-десять секунд. Поэтому я просто позволяю ему убегать от экрана.