Как изменить направление выделения текста TextView

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

Ответ 1

Я понял очень простой и простой способ сделать это. Я сделал эффект выделения для перемещения в обоих направлениях в зависимости от нашего выбора. Итак, вот трюк:

Я использовал TextView внутри HorizontalScrollView. Я контролировал ее прокрутку программным способом. Я получил длину текста, используя:

scroll_pos = (int)myTextView.getLayout().getLineWidth(0);

Затем я использовал обработчик и вызвал его рекурсивно, пока не достиг предела прокрутки. В этом обработчике я сделал свой HorizontalScrollView для прокрутки до определенной позиции:

Handler hHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        hScroll.scrollTo(scroll_pos, 0);
        scroll_pos--;
        if(scroll_pos >= 0)
            hHandler.sendEmptyMessage(0);
    }       
};

И здесь идет, гладкая шатер слева от правого. Ура!

Ответ 2

Еще один простой способ - использовать HTML, а также легко изменить направление direction="Left"

<html><body><FONT COLOR="#000000" ><marquee id="mrqSlogan"  direction="Left" style="width: auto;" >text your</marquee></FONT></body></html>

И перейдите в WebView

webView.loadDataWithBaseURL(null, yourhtmltext, "text/html" , null, null);

Ответ 3

Наконец я нашел лучшее решение здесь: https://github.com/Torob/MarqueeView

благодаря torob.ir

использовать эту библиотеку:

  1. просто добавьте этот файл Java (MarqueeView.java) в свой проект папка java
  2. в макете XML поместите свой TextView внутри этого   MarqueeView, как это:

      <your.packagename.MarqueeView
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:id="@+id/horizontalScrollView"
           android:scrollbars="none"
           android:visibility="visible"
           android:clickable="false"> 
       <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/test"
            android:id="@+id/scrollingtext"
            android:singleLine="true"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:paddingRight="25dp"
            android:paddingLeft="25dp" />
       </your.packagename.MarqueeView>
    

Ответ 4

В настоящее время функциональность, которую вы ищете, пока недоступна.

Вы можете создать свое собственное текстовое изображение с обратной меткой из исходного текста в TextView.java, но в нем есть несколько ссылок на "шатер". Я подсчитал более 50, поэтому может потребоваться некоторое время, чтобы изменить направление прокрутки.

Я думал, что некоторая двунаправленная поддержка языка может позволить вам обмануть текст в прокрутке влево-вправо, но Android, похоже, не очень хорошо поддерживает языки RTL.

Теперь ваш единственный вариант - принять направление области выделения или создать собственный класс TextView, который поддерживает ваши функции.

Я бы посмотрел на этот раздел из строки 3810 - 3815

  if (mMarquee != null && mMarquee.isRunning()) {
        canvas.translate(-mMarquee.mScroll, 0.0f);
    }

удаление знака минус до появления mMarquee:

  if (mMarquee != null && mMarquee.isRunning()) {
        canvas.translate(mMarquee.mScroll, 0.0f);
    }

Очевидно, вам нужно будет внести дополнительные изменения, но это укажет вам в правильном направлении (буквально).

Ответ 5

Я предлагаю вам создать свой собственный компонент с таким поведением.

Вот так: ViewFlipper с одним TextView как дочерним (с отображенным текстом).

flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.marquee_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.marquee_out));

Отметка в:

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0%p"
        android:toXDelta="-100%p"
        android:duration="1500"/>
</set>

Вывод:

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0%p"
        android:duration="1500"/>
</set>

Вам нужно немного настроить продолжительность, чтобы она выглядела как "родная" анимация.: -)

Ответ 6

Вот решение:

Установите это в файле макета:

<TextView
android:id="@+id/textId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"    
android:textColor="#337700"
android:textSize="20px"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:textStyle="bold"
android:text="Download Form for Different Vehiecle Purposes ....!!!">
</TextView>

И установите это в действие:

    tv = (TextView) findViewById(R.id.textId);
    tv.setSelected(true);

В моем случае это перемещает текст справа налево.

Ответ 7

Для текста справа налево для каждого используемого: попробуйте следующее:

        TextView tv = (TextView) findViewById(R.id.txt);
    Rect bounds = new Rect();
    Paint textPaint = tv.getPaint();
    String text = tv.getText().toString();
    textPaint.getTextBounds(text, 0, text.length(), bounds);
    int width = bounds.width();
    LinearLayout.LayoutParams lp = (LayoutParams) tv.getLayoutParams();
    lp.width = width + 100;
            int startX = 300;
    TranslateAnimation ta = new TranslateAnimation(startX, lp.width, 0, 0);
    ta.setDuration(20000);
    ta.setRepeatCount(-1);
    tv.setAnimation(ta);

Ответ 8

установить направление макета андроид: LayoutDirection = "РТЛ" андроид: textDirection = "РТЛ"

 <android.support.v7.widget.AppCompatTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="12dp"
            android:layout_marginRight="12dp"
            android:layout_weight="1"
            android:layoutDirection="rtl"
            android:textDirection="rtl"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:singleLine="true"
            android:text=" ......... گپ دوستان بیسیبییبب "
            android:textColor="@color/colorPrimaryDark"
            android:textSize="@dimen/font_size_xlarge" />