Сценарий
На экране у меня есть 2 менеджера: 1) менеджер меню вверху и 2) менеджер тела, который имеет элементы info / button. Менеджер меню выполняет пользовательское рисование, чтобы его элементы меню (LabelFields) были правильно расположены.
Основная проблема - порядок рисования менеджера и подполя
Экран хорошо рисует, за исключением случаев, когда пользователь выполняет действие (нажимает кнопку), в результате которого добавляется / удаляется элемент без менеджера тела. Как только элементы поля добавлены / удалены из тела, порядок, в котором отображается меню, смешивается.
Когда менеджер тела добавляет или удаляет поле, вместо того, чтобы рисовать сам менеджер меню, а затем его подэлементы (поля меток), менеджер меню начинает рисовать свои подэлементы, а затем сам ; таким образом, рисуя поверх полей ярлыков, они выглядят так, как будто они исчезли.
Комментарии
Уже пробовал аннулировать и другие опции - я пытался вызвать invalidate, invalidateall, updateDisplay ... после добавления / удаления элементов поля из тела. Все без успеха.
Удаление пользовательского подслоя работает. Единственный способ решить эту проблему - удалить логику пользовательского подуровня менеджеров меню. К сожалению, система меню тогда рисует традиционным способом и не обеспечивает достаточного расстояния.
Ниже приведен код подслоя менеджера меню, я что-то здесь упускаю?
public void sublayout(int iWidth, int iHeight)
{
final int iNumFields = getFieldCount();
int maxHeight = 0;
final int segmentWidth = iWidth / iNumFields;
final int segmentWidthHalf = segmentWidth / 2;
for (int i = 0; i < iNumFields; i++)
{
final Item currentField = (Item)this.getField(i);
// 1. Use index to compute bounds of the field
final int xSegmentTrueCenter = segmentWidth * i + segmentWidthHalf;
// 2. center field inbetween bounds using field width (find fill width of text)
final int xFieldStart = xSegmentTrueCenter - currentField.getFont().getAdvance(currentField.getText())/2;
// set up position
setPositionChild(currentField, xFieldStart, getContentTop() + MenuAbstract.PADDING_VERTICAL);
// allow child to draw itself
layoutChild(currentField, iWidth, currentField.getHeight());
// compute max height of the field
//int fieldheight = currentField.getHeight();
maxHeight = currentField.getHeight() > maxHeight
? currentField.getHeight() + 2 * MenuAbstract.PADDING_VERTICAL
: maxHeight;
}
this.setExtent(iWidth, maxHeight);
}
Заключительные вопросы
В конечном итоге я хочу сохранить пользовательский макет менеджера меню, в то же время позволяя перерисовывать элементы поля. Вот мои последние вопросы:
Вы уже испытывали это раньше?
Почему менеджер меню начинает рисовать в неправильном порядке, когда элемент поля добавляется / удаляется на экран?
Делает ли native Manager.sublayout () что-то, что я не поддерживаю в порядке рисования?