Как указать ширину представления, чтобы обернуть содержимое и, тем не менее, быть шире, чем его родитель? - PullRequest
3 голосов
/ 30 января 2012

У меня есть TextView в FrameLayout следующим образом:

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    ... >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        ... />

Текст TextView установлен в коде, и у меня есть анимация перевода, работающая в TextView, которая перемещает его влево по родительскому представлению какследует:

myTextView.setText(getVenueInformationText());
myTextView.setAnimation(AnimationUtils.loadAnimation(myContext, R.anim.slide_left_repeatedly));

Мне нужно учесть оба случая, когда текст в TextView короче или шире, чем ширина родительского представления (в данном случае FrameLayout).Тем не менее, я обнаружил, что ширина анимированного TextView всегда равна ширине FrameLayout (и, следовательно, мой текст обрезается).

Кто-нибудь знает почему, когда я устанавливаю текст в TextView и устанавливаюанимация, TextView появляется только во всю ширину как FrameLayout (даже если текст в TextView должен растягивать его, чтобы он был шире, чем FrameLayout)?

Примечание 1: Анимация выделения в TextView не будет выполнять эту работу за меня, поскольку возможно, что текст в TextView будет меньше ширины родительского представления (в этом случае анимация выделения не запускается ... и мне нужноанимация для запуска независимо от ширины текста).

Примечание 2: Ниже приведено определение XML для анимации перевода, которую я использую:

 <translate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:interpolator="@android:anim/linear_interpolator"
  android:fromXDelta="100%p"
  android:toXDelta="-100%"
  android:repeatCount="infinite"
  android:duration="15000" />

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Решил это, поместив мой TextView в HorizontalScrollView (вместо FrameLayout или LinearLayout) следующим образом ...

<HorizontalScrollView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:paddingLeft="10dp"
  android:paddingRight="10dp"
  android:scrollbars="none" >
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true" />
</HorizontalScrollView>

... и затем программно / динамически установил текст и анимацию TextView программно / динамическикак и раньше.

0 голосов
/ 02 февраля 2012

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

Я бы сделал это следующим образом: ваш TextView должен обернуть ваш контентширину (как минимум), тогда вы используете стандартный TranslateAnimation, начиная с правой стороны родительского элемента View и заканчивая (parentView.getLeft() - TextView.getWidth() - в этом случае ваш TextView будет скрыт), установитеAnimationListener для этой анимации и в конце ее проверьте, есть ли какая-то новая информация из источника, которую вы можете установить как новое содержимое TextView, и снова запустите Animation.

...