Mam proste niestandardowy TextView który ustawia niestandardową czcionkę w jego konstruktora jak poniższy kod„requestLayout() niewłaściwie nazywane przez ...” błędu na 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);
}
}
Współpracuje z Piernika przez JB 4.2 . Ale logcat adb jest zalewany następującymi komunikatami, gdy wyświetlam własny tekst na telefonie z Androidem 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
Zauważam, że nieco spowalnia interfejs użytkownika. Jakieś pomysły, dlaczego tak się dzieje w 4.3?
Doceń swoją pomoc.
Czy próbowałeś przenieść 'setTypeface()' i/lub 'setPaintFlags()' później w cyklu życia widoku, jak 'onFinishInflate()' czy coś? Domyślam się, że 'setTypeface()' wyzwala 'requestLayout()', ponieważ prawdopodobnie nie oczekiwali, że zostanie wywołana w konstruktorze widoku. – CommonsWare
Próbowałem przenieść go do onFinishInflate(), które również nie pomogło. Widzę te wiadomości requestLayout() w dziennikach – Sanjay
Czy jedynym celem MyTextView jest ustawienie niestandardowej czcionki? Tworzenie niestandardowego widoku, aby ustawić czcionkę cutom, nie jest dobrym rozwiązaniem. – GareginSargsyan