Ho una semplice TextView personalizzato che imposta carattere personalizzato nel suo costruttore, come il codice qui sotto"requestLayout() impropriamente chiamato da ..." errore su Android 4.3
public class MyTextView extends TextView {
@Inject CustomTypeface customTypeface;
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
RoboGuice.injectMembers(context, this);
setTypeface(customTypeface.getTypeface(context, attrs));
setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
}
Funziona bene da Gingerbread attraverso JB 4.2 . Ma il logbat adb è inondato con i seguenti messaggi quando mostro la mia vista testuale personalizzata su telefono Android 4.3.
10-05 16:09:15.225: WARN/View(9864): requestLayout() improperly called by com.cmp.views.MyTextView{42441b00 V.ED.... ......ID 18,218-456,270 #7f060085 app:id/summary} during layout: running second layout pass
10-05 16:09:15.225: WARN/View(9864): requestLayout() improperly called by com.cmp.views.MyTextView{423753d0 V.ED.... ......ID 26,176-742,278 #7f060085 app:id/summary} during layout: running second layout pass
Noto che rallenta l'interfaccia utente un po '. Qualche idea sul perché sta accadendo su 4.3?
Apprezzo il tuo aiuto.
Hai provato a spostare 'setTypeface()' e/o 'setPaintFlags()' più avanti nel ciclo di vita della vista, come 'onFinishInflate()' o qualcosa del genere? La mia ipotesi è che 'setTypeface()' stia attivando un 'requestLayout()', poiché probabilmente non si aspettavano che venisse chiamato in un costruttore di viste. – CommonsWare
Ho provato a spostarlo su onFinishInflate(), che non ha aiutato neanche. Vedo quei messaggi requestLayout() nei registri – Sanjay
L'unico scopo del MyTextView è impostare un carattere personalizzato? Creare una vista personalizzata per impostare un font non è una buona soluzione. – GareginSargsyan