Am încercat să folosească marquee și nu funcționează aici este codul meu, te rog, lasă-mă să știu unde im de gând greșit
<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>
eu sunt, folosind SDK-ul android 2.0.1
funcționează acum :) Codul atașat mai jos
<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 (pe numele Adil Hussain):
`textView.setSelected(true) are nevoie să fie stabilite în codul spatele pentru ca aceasta să funcționeze.
android:singleLine="true"
android:ellipsize="marquee"
sunt doar atribute necesare și derularea chiar funcționează cu layout_weight
definit cu layout_width=0dp`
aici este un exemplu de cod:
<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"
/>
Dar ceea ce este cel mai important este implicit sau în mod explicit TextView
ar trebui sa selectate.
Puteți face acest lucru cu:
TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(true);
Aceste atribute trebuie să fie incluse în textview` tag-ul, în scopul de a permite defilare.
Orice altceva este opțională.
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:ellipsize="marquee"
M-am confruntat cu aceeași problemă și această discuție m-a ajutat nu doar să o înlocuiască această linie
android:maxLines="1"
cu această linie în xml
android:singleLine="true"
și funcționează
linia txtView.setSelected(true);
a fost, de asemenea, în activitatea mea.
Foarte Simplu de lucru cod:
Pentru infinit scrolling text
<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" />
& tu ar trebui să trebuie să scrie din activitatea dvs.
textView.setSelected(true);
Am trecut prin această situație în care textview marquee nu a fost de lucru. Cu toate acestea urmați acest lucru și sunt sigur că va funcționa. :)
<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"/>
și programatic adăuga aceste 2 linii...
tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);
tvMarquee.setSelected(true) este necesar incase dacă oricare dintre cele de vedere este deja concentrat și setSelected va face să funcționeze. Nu este nevoie de a utiliza.
android:singleLine="true"
ea este învechită și codurile de mai sus funcționează.
De Lucru Cod:
<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" />
Am'm de lucru cu minSDK=14 si a fost curios ce set de aceste variații ar funcționa. Am ajuns cu:
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
în plus față de alte formatare lucruri. Am't nevoie de scrollHoriontally, focusable, sau focusableInTouchMode.
Acest set de a solicita un apel la
setSelected(true)
Ce mi se pare interesant este că singleLine ar fi fost depreciat, cu recomandarea să-l înlocuiască cu maxLines = 1. Cu excepția - atunci când fac asta, care schimba singur se oprește textul din defilare. Să sperăm că, atunci când singleLine în cele din urmă mușcă din țărână, că toate comportamentul actual va fi declanșat de maxLines...
Am'am întâmpinat aceeași problemă. Amith GC's răspuns(primul răspuns verificat ca a acceptat) este corect, dar, uneori, textview.setSelected(true); nu't de lucru atunci când textul vedere poate't obține focalizarea tot timpul. Deci, pentru a asigura TextView Marquee lucru, am avut de a folosi un custom 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;
}
}
Și apoi, puteți utiliza personalizat TextView ca text derulant view în layout .fișier xml astfel:
<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"/>
NOTĂ: în fragmentul de cod de mai sus, com.exemplu.myapplication este un exemplu pachetul nume și ar trebui să fie înlocuită de propria ta numele pachetului.
Sper că acest lucru vă va ajuta. Noroc!
Doar adăuga celor mai spus mai sus:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
ȘI!! trebuie utilizarea TextView.setSelected(true) în interiorul cod java.
Motivul pentru marquee nu lucrează cu unele dintre voi în acest articol , Dacă aveți un formular de intrare cu un EditText ( care este o intrare), La EditText va fi unul cu focus și selecție în mod implicit în formă. Acum, dacă-l forțezi prin TextView.setSelected(true), TextView va face în cele din urmă marquee, indiferent de ce.
Deci, ideea este de a face TextView widget concentrat și selectate pentru a face selecție de muncă.
Trebuie să adăugați aceste atribute care este compulsary la 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;
}
}
acest cod funcționează corect, dar dacă ur dimensiunea ecranului nu este de a umple acest text nu se va muta, încercați să palcing spațiu alb sfârșitul textului
Pune acești parametri în TextView. Functioneaza :)
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
`
Pentru a avea propriul dvs. alegeți viteza și flexibilitatea de a personaliza marquee properties, utilizați următoarele opțiuni:
<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" />
În activitatea dumneavoastră:
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);
}
Da, marquee_forever lucra, de asemenea, în caz de lățime fixă pentru TextView. (de exemplu, android:layout_width="120dp")
Trebuie să atribute necesare sunt:
De lucru cod:
<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!" />
Am creat o clasă personalizat 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);
}
}
Și puteți startMarquee cand dorinta.. ca
//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true);
Cele mai multe dintre răspunsurile sunt identice, dar, de asemenea, observa că, în unele cazuri marquee nu va funcționa fără a preciza de lățime în sosuri pentru container. De exemplu, dacă utilizați greutate în container părinte
android:layout_width="0dp"
android:layout_weight="0.5"
marquee-ar putea să nu funcționeze.