TextView Marquee не работает

Я попытался использовать шатер и его не работает вот мой код, пожалуйста, дайте мне знать, где я ошибаюсь

<TextView
   android:text="lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00"
   android:id="@+id/TextView02"
   android:layout_width="200dip"
   android:layout_height="wrap_content"
   android:marqueeRepeatLimit="marquee_forever"
   android:ellipsize="marquee"
   android:singleLine="true"
   android:focusable="true"
   android:inputType="text"
   android:maxLines="1">
</TextView>

Я использую android SDK 2.0.1

Ответ 1

работает сейчас:) Приведенный ниже код

<TextView
    android:text="START | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | END"
    android:id="@+id/MarqueeText" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:singleLine="true"
    android:ellipsize="marquee" 
    android:marqueeRepeatLimit="marquee_forever"
    android:scrollHorizontally="true" 
    android:paddingLeft="15dip" 
    android:paddingRight="15dip" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:freezesText="true">

Изменить (от имени Адиля Хуссейна):

textView.setSelected(true) необходимо установить код, чтобы это работало.

Ответ 2

android:singleLine="true"
android:ellipsize="marquee"

являются единственными требуемыми атрибутами, а прокрутка работает даже с layout_weight, определенной с помощью layout_width=0dp

вот пример кода:

<TextView 
            android:id="@+id/scroller"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#FFFFFF"
            android:text="Some veryyyyy long text with all the characters that cannot fit in screen, it so sad :( that I will not scroll"
            android:layout_marginLeft="4dp"
            android:layout_weight="3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            />

Но самое главное - неявно или явно TextView следует выбрать.

Вы можете сделать это с помощью

TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(true);

Ответ 3

Эти атрибуты должны быть включены в тег textview, чтобы разрешить прокрутку.

Все остальное необязательно.

android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:ellipsize="marquee"

Ответ 4

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

android:maxLines="1"

с этой строкой в ​​xml

android:singleLine="true"

и он работает строка txtView.setSelected(true); также был в моей деятельности.

Ответ 5

Очень простой рабочий код:

Для бесконечно прокручиваемого текста

            <TextView
            android:id="@+id/textView_News_HeadLine"
            style="@style/black_extra_large_heading_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="8dp"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="-1"
            android:singleLine="true"
            android:text="HeadLine: Banglawash To be Continued" />

& вы должны написать из своей деятельности

textView.setSelected(true);

Ответ 6

Рабочий код:

<TextView
    android:id="@+id/scroller"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:singleLine="true"
    android:text="Some veryyyyy long text with all the characters that cannot fit in screen, it so sad :( that I will not scroll"
    android:textAppearance="?android:attr/textAppearanceLarge" />

Ответ 7

Я работаю с minSDK = 14, и мне было любопытно, какой набор этих вариантов будет работать. Я закончил с:

android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"

в дополнение к другим материалам форматирования. Мне не нужно было прокручиватьHoriontally, focusable или focusableInTouchMode.

Для этого набора потребовался вызов

setSelected(true)

Интересным является то, что singleLine предположительно устарел, с рекомендацией заменить его maxLines = 1. За исключением - когда я это делаю, это изменение останавливает текст от прокрутки. Можно было бы надеяться, что когда SingleLine в конечном итоге укусит пыль, все ее текущее поведение будет вызвано maxLines...

Ответ 8

Просто добавьте те, что указаны выше:

    android:singleLine="true" 
    android:ellipsize="marquee"
    android:marqueeRepeatLimit ="marquee_forever"

И!! вы должны использовать TextView.setSelected(true) внутри вашего java-кода.

Причина того, что marquee не работает с некоторыми из парней в этой статье. Если у вас есть форма ввода с помощью EditText (который является вводом), The EditText будет тем, у кого есть фокус и выбор по умолчанию в форме. Теперь, если вы вынудите его через TextView.setSelected(true), TextView в конечном итоге сделает шатер независимо от того, что.

Итак, вся идея состоит в том, чтобы сделать виджет TextView сфокусированным и выбранным, чтобы сделать работу выделения.

Ответ 9

Я столкнулся с той же проблемой. Ответ Амита GC (первый ответ проверен как принятый) прав, но иногда textview.setSelected(true); не работает, когда текстовое представление не может получить фокус все время. Итак, чтобы обеспечить работу TextView Marquee, мне пришлось использовать пользовательский TextView.

public class CustomTextView extends TextView {
    public CustomTextView(Context context) {
        super(context);
    }
    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }


    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }


    @Override
    public boolean isFocused() {
        return true;
    }
}

И затем вы можете использовать пользовательский TextView в качестве прокручиваемого текстового представления в вашем файле .xml макета, например:

<com.example.myapplication.CustomTextView
            android:id="@+id/tvScrollingMessage"
            android:text="@string/scrolling_message_main_wish_list"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit ="marquee_forever"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:scrollHorizontally="true"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/black"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="15dp"
            android:freezesText="true"/>

ПРИМЕЧАНИЕ: в приведенном выше фрагменте кода com.example.myapplication является примером имени пакета и его следует заменить на собственное имя пакета.

Надеюсь, это поможет вам. Ура!

Ответ 10

Я пережил эту ситуацию, когда область текста не работала. Однако следуйте этому, и я уверен, что он сработает.:)

<TextView
         android:id="@+id/tv_marquee"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:focusable="true"
         android:focusableInTouchMode="true"
         android:freezesText="true"
         android:maxLines="1"
         android:scrollHorizontally="true"
         android:text="This is a sample code of marquee and it works"/>

и программно добавить эти 2 строки...

tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);

tvMarquee.setSelected(true) требуется, если какой-либо из просмотров уже сфокусирован и setSelected заставит его работать. Не нужно использовать.

android:singleLine="true"

он устарел и над кодами работает.

Ответ 11

package com.app.relativejavawindow;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.text.TextUtils.TruncateAt;
import android.view.Menu;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final RelativeLayout relativeLayout = new RelativeLayout(this);
        final RelativeLayout relativeLayoutbotombar = new RelativeLayout(this);
        textView = new TextView(this);
        textView.setId(1);

        RelativeLayout.LayoutParams relativlayparamter = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT);

        RelativeLayout.LayoutParams relativlaybottombar = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        relativeLayoutbotombar.setLayoutParams(relativlaybottombar);


        textView.setText("Simple application that shows how to use marquee, with a long ");
        textView.setEllipsize(TruncateAt.MARQUEE);
        textView.setSelected(true);
        textView.setSingleLine(true);


        relativeLayout.addView(relativeLayoutbotombar);
        relativeLayoutbotombar.addView(textView);
        //relativeLayoutbotombar.setBackgroundColor(Color.BLACK);
        setContentView(relativeLayout, relativlayparamter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

этот код работает правильно, но если размер экрана ur не заполняет этот текст, он не будет перемещаться, пытаясь отобразить пробел в конце текста

Ответ 12

Используйте следующую строку в коде:

TextView.setSelected(true);

Ответ 13

Вы должны добавить эти атрибуты, которые являются обязательными для выделения.

 android:ellipsize="marquee"     
 android:focusable="true"    
 android:focusableInTouchMode="true"     
 android:singleLine="true"     
 android:marqueeRepeatLimit="marquee_forever"     
 android:scrollHorizontally="true"

Ответ 14

Да, marquee_forever также работают в случае фиксированной ширины для TextView. (например, android: layout_width = "120dp" )

Обязательные атрибуты:

  • android: focusable = "true"
  • Android: focusableInTouchMode = "истинный"
  • android: singleLine = "true" // если текст отсутствует в нескольких строках.

Рабочий код:

<TextView
                android:id="@+id/mediaTitleTV"
                android:layout_width="220dp"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:marqueeRepeatLimit="marquee_forever"
                android:singleLine="true"
                android:text="Try Marquee, it works with fixed size textview smoothly!" />

Ответ 15

Просто поместите эти параметры в свой TextView. Он работает:)

    android:singleLine="true" 
    android:ellipsize="marquee"
    android:marqueeRepeatLimit ="marquee_forever"
    android:scrollHorizontally="true"
    android:focusable="true"
    android:focusableInTouchMode="true" 

`

Ответ 16

 <TextView
  android:ellipsize="marquee"
  android:singleLine="true"
  .../>

должен вызывать код

textView.setSelected(true);

Ответ 17

Я создал собственный класс AlwaysMarqueTextView

public class AlwaysMarqueeTextView extends TextView
{
    protected boolean a;

    public AlwaysMarqueeTextView(Context context)
    {
        super(context);
        a = false;
    }

    public AlwaysMarqueeTextView(Context context, AttributeSet attributeset)
    {
        super(context, attributeset);
        a = false;
    }

    public AlwaysMarqueeTextView(Context context, AttributeSet attributeset, int i)
    {
        super(context, attributeset, i);
        a = false;
    }

    public boolean isFocused()
    {
        return a || super.isFocused();
    }

    public void setAlwaysMarquee(boolean flag)
    {
        setSelected(flag);
        setSingleLine(flag);
        if(flag)
        setEllipsize(TruncateAt.MARQUEE);
        a = flag;
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) 
    {
        if(focused)

            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused)
    {
        if(focused)
            super.onWindowFocusChanged(focused);
    }
}

И вы можете начатьMarquee, когда желание.. как

//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true); 

Ответ 18

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

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:fadingEdge="horizontal"
    android:lines="1"
    android:id="@+id/myTextView"
    android:padding="4dp"
    android:scrollHorizontally="true"
    android:singleLine="true"
    android:text="Simple application that shows how to use marquee, with a long text" />

В рамках вашей деятельности:

private void setTranslation() {
        TranslateAnimation tanim = new TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 1.0f * screenWidth,
                TranslateAnimation.ABSOLUTE, -1.0f * screenWidth,
                TranslateAnimation.ABSOLUTE, 0.0f,
                TranslateAnimation.ABSOLUTE, 0.0f);
        tanim.setDuration(1000);
        tanim.setInterpolator(new LinearInterpolator());
        tanim.setRepeatCount(Animation.INFINITE);
        tanim.setRepeatMode(Animation.ABSOLUTE);

        textView.startAnimation(tanim);
    } 

Ответ 19

android: focusable = "true" и android: focusableInTouchMode = "true" необходимы...

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

Ответ 20

введите описание изображения здесь

 import android.app.Activity;
 import android.os.Bundle;
 import android.text.TextUtils.TruncateAt;
 import android.widget.TextView;

 public class MainActivity extends Activity {
 private TextView textview;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textview = (TextView) this.findViewById(R.id.textview);
    textview.setSelected(true);

    textview.setEllipsize(TruncateAt.MARQUEE);
    textview.setSingleLine(true);
 }

 }

для получения дополнительной справки нажмите здесь http://androiddhina.blogspot.in/2015/10/marquee-effect-in-android-textview.html

Ответ 21

Большинство ответов идентичны,
но также обратите внимание, что в некоторых случаях шатер не будет работать без указания ширины в провалах для контейнера.
Например, если вы используете вес в родительском контейнере

android:layout_width="0dp"
android:layout_weight="0.5"

может не работать.