TextView Marquee ne fonctionne pas [dupliquer]
cette question a déjà une réponse ici:
- texte en Androïde 15 réponses
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
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.
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);
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 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é.
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);
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 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...
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.
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!
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.
<TextView
android:ellipsize="marquee"
android:singleLine="true"
.../>
doit appeler en code
textView.setSelected(true);
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"
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
utilisez la ligne suivante dans votre code:
TextView.setSelected(true);
Oui, marquee_forever fonctionnent aussi en cas de largeur fixe pour TextView . (par exemple android: layout_width= "120dp")
les attributs obligatoires sont:
- android: focalisable= "true"
- android: focableintouchmode= "true"
- 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!" />
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"
`
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);
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);
}
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..
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
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.