J'ai essayé d'utiliser Marquee et son ne fonctionne pas ici est mon code, s'il vous plaît laissez-moi savoir où im va 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
travaille maintenant :) Code ci-dessous
<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 défini dans le code derrière pour que cela fonctionne.
Android:singleLine="true"
Android:ellipsize="Marquee"
sont les seuls attributs requis et le défilement fonctionne même avec layout_weight
défini avec 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 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);
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"
J'ai rencontré le même problème et cette discussion m'a aidé à 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é.
Code de travail très simple:
Pour faire défiler le texte à l'infini
<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 devriez écrire de votre activité
textView.setSelected(true);
<TextView
Android:ellipsize="Marquee"
Android:singleLine="true"
.../>
doit appeler le code
textView.setSelected(true);
J'avais vécu cette situation où Textview Marquee ne fonctionnait pas. Cependant, suivez ceci et je suis sûr que cela fonctionnera. :)
<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 par programme ces 2 lignes ...
tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);
tvMarquee.setSelected (true) est requis si l'une des vues est déjà active et que setSelected le fera fonctionner. Pas besoin d'utiliser.
Android:singleLine="true"
il est obsolète et les codes ci-dessus fonctionnent.
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" />
Je travaille avec minSDK = 14 et j'étais curieux de savoir quel ensemble de ces variations fonctionnerait. J'ai fini avec:
Android:ellipsize="Marquee"
Android:marqueeRepeatLimit="Marquee_forever"
Android:singleLine="true"
en plus d'autres choses de formatage. Je n'avais pas besoin de scrollHorionally, focusable ou focusableInTouchMode.
Cet ensemble a nécessité un appel à
setSelected(true)
Ce que je trouve intéressant, c’est que singleLine aurait été déconseillée, avec la recommandation de la remplacer par maxLines = 1. Sauf que, lorsque je le fais, cette modification empêche à elle seule le défilement du texte. On peut espérer que lorsque singleLine finira par mordre la poussière, tout son comportement actuel sera déclenché par maxLines ...
J'ai rencontré le même problème. La réponse d'Amith GC (la première réponse cochée comme étant acceptée) est correcte, mais parfois textview.setSelected (true); ne fonctionne pas lorsque la vue texte ne parvient pas à obtenir le focus tout le temps. Donc, pour que TextView Marquee fonctionne, je devais 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 puis, vous pouvez utiliser le TextView personnalisé comme vue de texte défilant dans votre fichier .xml de présentation 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"/>
REMARQUE: dans l'extrait de code ci-dessus, com.example.myapplication est un exemple de nom de package qui doit être remplacé par votre propre nom de package.
J'espère que cela vous aidera. À votre santé!
Ajoutez simplement ceux mentionnés ci-dessus:
Android:singleLine="true"
Android:ellipsize="Marquee"
Android:marqueeRepeatLimit ="Marquee_forever"
ET!! vous devez utiliser TextView.setSelected (true) dans votre Java).
La raison pour laquelle Marquee ne fonctionne pas avec certains des types de cet article, si vous avez un formulaire avec un EditText (qui est une entrée), le EditText sera celui avec le focus et la sélection par défaut dans le formulaire. Maintenant, si vous le forcez avec TextView.setSelected (true), TextView finira par faire Marquee, quoi qu’il en soit.
L’idée est donc de focaliser le widget TextView et de le sélectionner pour que Marquee fonctionne.
Vous devez ajouter ces attributs qui sont obligatoires pour Marquee
Android:ellipsize="Marquee"
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:singleLine="true"
Android:marqueeRepeatLimit="Marquee_forever"
Android:scrollHorizontally="true"
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 votre écran n’est pas remplie, il ne bougera pas, essayez de placer un espace en fin de texte
Utilisez la ligne suivante dans votre code:
TextView.setSelected(true);
Oui, Marquee_forever fonctionne également en cas de largeur fixe pour TextView. (par exemple, Android: layout_width = "120dp")
Les attributs obligatoires sont:
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!" />
Il suffit de mettre ces paramètres dans votre TextView. Ça marche :)
Android:singleLine="true"
Android:ellipsize="Marquee"
Android:marqueeRepeatLimit ="Marquee_forever"
Android:scrollHorizontally="true"
Android:focusable="true"
Android:focusableInTouchMode="true"
`
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 commencerMarque quand vous le souhaitez .. comme
//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true);
Pour disposer de votre propre vitesse de défilement et de la possibilité de personnaliser les propriétés du rectangle, utilisez les éléments suivants:
<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" />
Au sein 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);
}
La plupart des réponses sont identiques,
mais notez également que, dans certains cas, Marquee ne fonctionnera pas sans spécifier de largeur en creux pour le conteneur.
Par exemple, si vous utilisez le poids dans le conteneur parent
Android:layout_width="0dp"
Android:layout_weight="0.5"
Le chapiteau peut ne pas fonctionner.
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érences, cliquez ici http://androiddhina.blogspot.in/2015/10/Marquee-effect-in-Android-textview.html
Android: focusable = "true" et Android: focusableInTouchMode = "true" sont essentiels ....
Parce que j'ai testé tous les autres sans ces lignes et que le résultat n'était pas un chapiteau. Quand j’ajoute cela, cela a commencé à Marquee ..