У меня есть простой пользовательский TextView, который устанавливает специальный шрифт в его конструктор как код ниже«requestLayout() неправильно называют ...» ошибки на 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);
}
}
Он отлично работает с Gingerbread через JB 4.2 , Но logcat adb заливается следующими сообщениями, когда я показываю свой пользовательский текстовый просмотр на телефоне 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
Я замечаю, что это немного замедляет пользовательский интерфейс. Любые идеи, почему это происходит на 4.3?
Цените свою помощь.
Вы пытались переместить 'setTypeface()' и/или 'setPaintFlags()' позже в жизненном цикле представления, например 'onFinishInflate()' или что-то еще? Я предполагаю, что 'setTypeface()' запускает 'requestLayout()', поскольку они, вероятно, не ожидали, что он будет вызван в конструкторе представления. – CommonsWare
Я попытался переместить его в onFinishInflate(), что тоже не помогло. Я вижу те запросы requestLayout() в журналах – Sanjay
Является ли единственным назначением MyTextView настраиваемым шрифтом? Создание настраиваемого представления для установки шрифта cutom не является хорошим решением. – GareginSargsyan