para - manual de programacion android pdf
¿Por qué Marquee no funciona en Widget? (4)
Supongo que es el siguiente problema:
el método setText(CharSequence)
está restableciendo MarqueeRepeatLimit. El método setText(CharSequence)
es un RemotableViewMethod
, lo que significa que no se puede acceder desde RemoteView. El setMarqueeRepeatLimit()
no tiene esta anotación especial. No veo la manera, cómo podría establecer el texto y mantener su estado Marquee dentro de una vista remota. Tal vez el Método SetText
de TextView te ayude 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());
}
}
Soy un novato en Android y estoy tratando de crear un widget que use la marquesina TextView para mostrar tweets en forma de ticker. Cuando configuro el texto en el xml, la marquesina se desplaza correctamente en el widget. Sin embargo, cuando intento establecer el texto mediante programación, la marquesina no se desplaza. El texto está configurado, pero simplemente no se desplaza. Este comportamiento es desconcertante porque utilicé esta pregunta SO 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);
}
Prueba esto. Establezca el lapso 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);
Asegúrate de usar android:singleLine="true"
y android:scrollHorizontally="false"
(o eliminarlo por completo) en tu XML. Esto debería funcionar.
Esto podría funcionar para usted
En tu diseño:
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:marqueeRepeatLimit="marquee_forever"
android:text=""/>
En tu 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);