¿Por qué la marquesina no funciona en Widget?

Soy un noob a android y estoy tratando de crear un widget que utiliza la marquesina textview para mostrar tweets en una moda ticker. Cuando establezco el texto en el xml, la marquesina se desplaza correctamente en el widget. Sin embargo, cuando intento establecer el texto de forma programática la marquesina no se desplaza. El texto se establece, pero no se desplaza. Este comportamiento es desconcertante porque utilicé esta pregunta como mi guía. Cualquier ayuda es muy apreciada.

Mi diseño

<TextView android:id="@+id/ticker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:duplicateParentState="true" android:ellipsize="marquee" android:fadingEdge="horizontal" android:focusable="true" android:focusableInTouchMode="true" android:lines="1" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:text="Simple application that shows how to use marquee, with a long text for Twitter Feed" > //<--this text scrolls fine <requestFocus android:duplicateParentState="true" android:focusable="true" android:focusableInTouchMode="true" /> </TextView> 

Mi código

 public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { //String currentTime = df.format(new Date()); String spotgold = String.valueOf(MyActivity.widgetlivespotgold); String spotsilver = String.valueOf(MyActivity.widgetlivespotsilver); StringBuilder tickertweets=new StringBuilder(); for (int i = 0; i < MyActivity.twittername.size(); i++) { tickertweets.append(MyActivity.twittername.get(i) + ":" + " " + MyActivityActivity.twittertweet.get(i) + " "); } RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget1); updateViews.setTextViewText(R.id.goldspot, spotgold); updateViews.setTextViewText(R.id.silverspot, spotsilver); updateViews.setTextViewText(R.id.ticker, tickertweets.toString()); //Text is set, but doesn't scroll appWidgetManager.updateAppWidget(appWidgetId, updateViews); } 

Supongo que es el siguiente problema:

El método setText(CharSequence) está restableciendo el MarqueeRepeatLimit. El método setText(CharSequence) es un RemotableViewMethod , lo que significa que puede acceder desde una RemoteView. setMarqueeRepeatLimit() no tiene esta anotación especial. No veo ninguna manera, cómo usted podría fijar el texto y guardar su estado de Marquee dentro de un RemoteView. Tal vez el método SetText de TextView le ayuda un poco

 private void setText(CharSequence text, BufferType type, boolean notifyBefore, int oldlen) { if (text == null) { text = ""; } if (!mUserSetTextScaleX) mTextPaint.setTextScaleX(1.0f); if (text instanceof Spanned && ((Spanned) text).getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) { setHorizontalFadingEdgeEnabled(true); setEllipsize(TextUtils.TruncateAt.MARQUEE); } int n = mFilters.length; for (int i = 0; i < n; i++) { CharSequence out = mFilters[i].filter(text, 0, text.length(), EMPTY_SPANNED, 0, 0); if (out != null) { text = out; } } if (notifyBefore) { if (mText != null) { oldlen = mText.length(); sendBeforeTextChanged(mText, 0, oldlen, text.length()); } else { sendBeforeTextChanged("", 0, 0, text.length()); } } 

Asegúrese de usar android:singleLine="true" y android:scrollHorizontally="false" (o eliminarlo completamente) en su XML. Esto debería funcionar.

Prueba esto. Establezca el intervalo de Marquee antes de configurar el texto.

 SpannableString buffer = new SpannableString(tickertweets.toString()); buffer.setSpan(TextUtils.TruncateAt.MARQUEE,0, (tickertweets.length() -1) ,Spannable.SPAN_INCLUSIVE_INCLUSIVE); updateViews.setTextViewText(R.id.ticker, buffer); 

Esto podría funcionar para usted

En su diseño:

 <TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:marqueeRepeatLimit="marquee_forever" android:text=""/> 

En su código:

 TextView textView = (TextView)findViewById(R.id.TextView03); textView.setText(";lkjdf;alkdsfjoiawejrokajdsl;fkadmnsflkamndvklahoreiuaweifjakldsmflkhfgoueyhtoaijpkjdflkahndsofuhyoeia"); textView.setHorizontallyScrolling(true); textView.setEllipsize(TextUtils.TruncateAt.MARQUEE); textView.setSingleLine(); textView.setSelected(true); 
  • HTML.fromHtml Saltos de línea que desaparecen
  • ¿Cómo evitar OutOfMemory para TextView que contiene ilimitado ImageSpans?
  • Android Enlaza tanto web como @mentions todas en el mismo TextView
  • TextView de anchura fija con compuesto estirable
  • Android - Cómo manejar cuando se hace clic en el enlace TextView a través de Linkify
  • Cómo almacenar texto largo en Android?
  • Restablecer TextView vaya a la parte superior
  • TextView android: ellipsize = "marquee" no funciona como se esperaba
  • Cómo establecer el color del texto en una vista de texto mediante programación
  • Multiline TextView en Android?
  • Restablecer la posición de TextView (desplazable) en la nueva carga de texto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.