para - manual de programacion android pdf
TextView Marquee no funciona (21)
Código de trabajo:
<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" />
He intentado usar marquesina y no está funcionando aquí está mi código, por favor avíseme a dónde estoy yendo 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>
estoy usando Android SDK 2.0.1
Debe agregar estos atributos que son obligatorios para marquesina
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
Enfrenté el mismo problema y esta discusión me ayudó a reemplazar esta línea
android:maxLines="1"
con esta linea en xml
android:singleLine="true"
y funciona la línea txtView.setSelected(true);
también estaba en mi actividad.
Estos atributos deben incluirse en la etiqueta textview
para permitir el desplazamiento.
Todo lo demás es opcional.
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:ellipsize="marquee"
Estoy trabajando con minSDK = 14 y era curioso qué conjunto de estas variaciones funcionaría. Terminé con:
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
además de otras cosas de formato. No necesitaba scrollHoriontally, focusable, o focusableInTouchMode.
Este conjunto requirió una llamada a
setSelected(true)
Lo que me parece interesante es que SingleLine supuestamente ha quedado en desuso, con la recomendación de reemplazarlo por maxLines = 1. Excepto que, cuando lo hago, ese cambio por sí solo impide que el texto se desplace. Uno esperaría que cuando singleLine eventualmente muerda el polvo, todo su comportamiento actual será activado por maxLines ...
Había pasado por esta situación en la que textwork marquee no funcionaba. Sin embargo, sigan esto y estoy seguro de que funcionará. :)
<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"/>
y agregue programáticamente estas 2 líneas ...
tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);
tvMarquee.setSelected (true) es necesario en caso de que alguna de las vistas ya esté enfocada y setSelected hará que funcione. No es necesario usar
android:singleLine="true"
está en desuso y los códigos anteriores funcionan.
He encontrado el mismo problema. La respuesta de Amith GC (la primera respuesta marcada como aceptada) es correcta, pero a veces textview.setSelected (true); no funciona cuando la vista de texto no puede enfocarse todo el tiempo. Entonces, para garantizar que TextView Marquee funcione, tuve que usar un TextView personalizado.
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;
}
}
Y luego, puede usar el TextView personalizado como la vista de texto desplazable en su archivo de diseño .xml de la siguiente manera:
<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"/>
NOTA: en el fragmento de código anterior, com.example.myapplication es un nombre de paquete de ejemplo y debe ser reemplazado por su propio nombre de paquete.
Espero que esto te ayudará. ¡Aclamaciones!
La mayoría de las respuestas son idénticas,
pero también observe que, en algunos casos, la marquesina no funcionará sin especificar el ancho en salsas para el contenedor.
Por ejemplo, si usa peso en el contenedor principal
android:layout_width="0dp"
android:layout_weight="0.5"
marquesina puede no funcionar.
Para tener su propia velocidad de desplazamiento y flexibilidad para personalizar las propiedades de marquesina, use lo siguiente:
<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" />
Dentro de tu actividad:
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);
}
Sí, marquee_forever también funciona en caso de ancho fijo para TextView . (por ejemplo, android: layout_width = "120dp")
Los atributos obligatorios obligatorios son:
- android: enfocable = "verdadero"
- android: focusableInTouchMode = "true"
- android: singleLine = "true" // si falta texto aparece en varias líneas.
Código de trabajo:
<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!" />
Simplemente ponga estos parámetros en su TextView. Funciona :)
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
`
Solo agregue los que se mencionan arriba:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
¡¡Y!! debe usar TextView.setSelected (true) dentro de su código java.
El motivo por el que marquee no funciona con algunos de los tipos en este artículo. Si tiene un formulario de entrada con un EditText (que es una entrada), EditText será el que tenga el foco y la selección por defecto en el formulario. Ahora, si lo fuerza a través de TextView.setSelected (true), TextView eventualmente hará carpa sin importar qué.
Así que la idea es hacer que el widget TextView se enfoque y seleccione para que funcione la marquesina.
Use la siguiente línea en su código:
TextView.setSelected(true);
android: focusable = "true" y android: focusableInTouchMode = "true" son esenciales ...
Porque probé todos los demás sin estas líneas y el resultado no fue marquesina. Cuando agrego estos comenzó a marquesina ..
trabajando ahora :) Código adjunto a continuación
<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">
Editar (en nombre de Adil Hussain):
textView.setSelected(true)
necesita establecerse en código para que esto funcione.
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);
}
}
para obtener más información, haga clic aquí http://androiddhina.blogspot.in/2015/10/marquee-effect-in-android-textview.html
Código de trabajo muy simple:
Para texto infinitamente desplazable
<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" />
y debes escribir desde tu actividad
textView.setSelected(true);
Creé una clase personalizada 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);
}
}
Y puedes comenzar con Marquee cuando lo desees .. como
//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true);
<TextView
android:ellipsize="marquee"
android:singleLine="true"
.../>
debe llamar en el código
textView.setSelected(true);
android:singleLine="true"
android:ellipsize="marquee"
son los únicos atributos necesarios y el desplazamiento incluso funciona con layout_weight
definido con layout_width=0dp
aquí hay un código de muestra:
<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"
/>
Pero lo más importante es implícita o explícitamente que TextView
debería ser seleccionado .
Puedes hacer esto con:
TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(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;
}
}
este código funciona correctamente, pero si el tamaño de la pantalla no es rellenar este texto, no se moverá, intenta poner en blanco el espacio en blanco al final del texto