TextView Marquee ne fonctionne pas [dupliquer]

cette question a déjà une réponse ici:

j'ai essayé d'utiliser marquee et son ne fonctionne pas voici mon code, s'il vous plaît laissez-moi savoir où je vais mal

<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>

j'utilise android SDK 2.0.1

110
demandé sur Janusz 2010-07-26 11:19:55

21 réponses

travailler maintenant :) Code ci-après

<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">

Edit (au nom D'Adil Hussain):

textView.setSelected(true) doit être codé derrière pour que cela fonctionne.

238
répondu amithgc 2015-09-14 07:40:54
android:singleLine="true"
android:ellipsize="marquee"

sont les seuls attributs requis et le défilement fonctionne même avec layout_weight défini par layout_width=0dp

voici un exemple de code:

<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"
            />

mais ce qui est le plus important est implicitement ou explicitement TextView devrait être sélectionné .

vous pouvez le faire avec:

TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(true);
82
répondu Shardul 2011-12-15 08:38:55

ces attributs doivent être inclus dans la balise textview pour permettre le défilement.

tout le reste est facultatif.

android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:ellipsize="marquee"
23
répondu sajamaum 2012-01-14 18:23:20

j'ai fait face au même problème et cette discussion m'a aidé je viens de remplacer cette ligne

android:maxLines="1"

avec cette ligne en xml

android:singleLine="true"

et ça marche la ligne txtView.setSelected(true); était aussi dans mon activité.

19
répondu Dulal 2012-08-17 12:26:37

code de travail très Simple:

infiniment texte défilant

            <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" />

& vous devez écrire à partir de votre activité

textView.setSelected(true);
12
répondu Shihab Uddin 2013-11-13 04:27:23

Code De Travail:

<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" />
9
répondu Kirit Vaghela 2012-11-06 07:45:56

je travaille avec minSDK=14 et j'étais curieux de savoir quel ensemble de ces variations fonctionnerait. J'ai fini par:

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

en plus d'autres trucs de formatage. Je n'avais pas besoin de scrollHoriontally, focalisable, ou focalisable en mode point.

cet ensemble a nécessité un appel à

setSelected(true)

ce que je trouve intéressant, c'est que singleLine aurait été dépréciée, avec une recommandation de la remplacer par maxLines = 1. Sauf que-quand je fais ça, ce changement seul empêche le texte de défiler. On peut espérer que lorsque singleLine finira par mordre la poussière, tout son comportement actuel sera déclenché par maxLines...

7
répondu ssdscott 2014-05-04 16:24:54

j'avais traversé cette situation où textview marquee ne travaillait pas. Cependant, suivez - le et je suis sûr que ça marchera. :)

<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"/>

et ajouter programmatiquement ces 2 lignes...

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

tvMarquee.setSelected (true) est nécessaire si une vue est déjà ciblée et setSelected la fera fonctionner. Pas besoin d'utiliser.

android:singleLine="true"

il est déprécié et les codes ci-dessus fonctionne.

7
répondu Vijay E 2017-05-04 08:05:46

j'ai rencontré le même problème. La réponse d'Amith GC(la première réponse cochée comme acceptée) est correcte, mais parfois textview.setSelected (true); ne fonctionne pas lorsque la vue texte ne peut pas obtenir la mise au point tout le temps. Donc, pour m'assurer que TextView Marquee fonctionne, j'ai dû utiliser un TextView personnalisé.

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;
    }
}

et ensuite, vous pouvez utiliser le TextView personnalisé comme la vue de texte défilant dans votre mise en page .fichier xml comme ceci:

<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"/>

NOTE: dans le au-dessus de code snippet com.exemple.myapplication est un exemple de nom de paquet et doit être remplacé par votre propre nom de paquet.

espérons que cela vous aidera. Acclamations!

6
répondu David Roman 2016-04-16 10:51:47

il suffit d'ajouter ceux comme dit ci-dessus:

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

et!! vous devez utilisez TextView.setSelected (true) dans votre code java.

la raison pour laquelle marquee ne travaille pas avec certains des gars dans cet article , si vous avez un formulaire d'entrée avec un texte D'édition ( qui est un texte d'entrée), le texte D'édition sera celui avec le focus et la sélection par défaut dans le formulaire. Maintenant, si vous le forcez à passer par TextView.setSelected(true), TextView va éventuellement faire marquee quoi qu'il arrive.

donc l'idée est de rendre le widget TextView concentré et sélectionné pour faire fonctionner marquee.

5
répondu superlinux 2013-08-13 13:41:05
 <TextView
  android:ellipsize="marquee"
  android:singleLine="true"
  .../>

doit appeler en code

textView.setSelected(true);
5
répondu susemi99 2017-01-19 00:45:31

vous devez ajouter ces attributs qui est obligatoire à marquee

 android:ellipsize="marquee"     
 android:focusable="true"    
 android:focusableInTouchMode="true"     
 android:singleLine="true"     
 android:marqueeRepeatLimit="marquee_forever"     
 android:scrollHorizontally="true"
4
répondu Chandan kushwaha 2015-12-03 16:36:46
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;
    }

}

ce code fonctionne correctement mais si la taille de l'écran ur n'est pas remplir ce texte, il ne sera pas déplacer essayer de palcing espace blanc fin du texte

3
répondu harsha.kuruwita 2013-05-28 04:17:12

utilisez la ligne suivante dans votre code:

TextView.setSelected(true);
3
répondu Nima K 2013-09-04 14:01:49

Oui, marquee_forever fonctionnent aussi en cas de largeur fixe pour TextView . (par exemple android: layout_width= "120dp")

les attributs obligatoires sont:

  1. android: focalisable= "true"
  2. android: focableintouchmode= "true"
  3. android:singleLine="true" // si il manque du texte apparaissent dans plusieurs ligne.

code de travail:

<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!" />
2
répondu Monika 2013-06-01 20:18:30

mettez ces paramètres dans votre TextView. Il fonctionne :)

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

`

2
répondu XYZ_deve 2013-08-08 11:43:36

j'ai créé une classe personnalisée 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);
    }
}

et vous pouvez commencer la marche quand le désir.. comme

//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true); 
2
répondu Xar E Ahmer 2015-03-02 09:18:57

pour avoir votre propre vitesse de défilement et la flexibilité de personnaliser les propriétés marquee, utilisez ce qui suit:

<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" />

dans le cadre de votre activité:

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);
    } 
2
répondu Jaydev 2017-03-21 08:20:28

android: focusable= "true"et android:focusable intouchmode=" true " sont essentiels....

parce que j'ai testé tous les autres sans ces lignes et le résultat n'a pas été marquee. Quand j'ai ajouté ça, ça a commencé à marquer..

0
répondu poly 2014-11-28 07:48:45

enter image description here

 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);
 }

 }

pour plus de référence Cliquez ici http://androiddhina.blogspot.in/2015/10/marquee-effect-in-android-textview.html

0
répondu Dhina k 2015-10-08 06:06:54

la plupart des réponses sont identiques,

mais remarquez aussi que dans certains cas marquee ne fonctionnera pas sans spécifier de largeur dans les creux pour le conteneur.

Par exemple, si vous utilisez le poids dans le contenant parent

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

rectangle de sélection peut ne pas fonctionner.

0
répondu Leo Droidcoder 2016-08-17 10:14:02