2013-04-28 1 views
2

Я новичок в Dart и Rikulo.Как изменить ширину представлений TextBox, используя Rikulo Anchor Layout

class NameView extends Section 
{ 
    View parentVu; 

    // the inputs 
    DropDownList titleDdl, suffixDdl; 
    TextBox firstNameTBox, middleNameTBox, lastNameTBox; 

    // the labels 
    TextView titleLbl, firstNameLbl, middleNameLbl, lastNameLbl, suffixLbl; 

    List<String> titles = [ 'Dr', 'Hon', 'Miss', 'Mr', 'Mrs', 'Prof', 'Sir' ]; 
    List<String> suffixes = ['I', 'II', 'III', 'IV', 'Junior', 'Senior']; 

    NameView() 
    { 
    parentVu = new View() 
    ..style.background = 'cyan' 
    ..addToDocument(); 

    titleLbl = new TextView('Title'); 
    parentVu.addChild(titleLbl); 

    titleDdl = new DropDownList(model : new DefaultListModel(titles)) 
     ..profile.anchorView = titleLbl 
     ..profile.location = 'east center'; 
    parentVu.addChild(titleDdl); 

    firstNameLbl = new TextView('First') 
     ..profile.anchorView = titleDdl 
     ..profile.location = 'east center'; 
    parentVu.addChild(firstNameLbl); 

    firstNameTBox = new TextBox(null, 'text') 
     ..profile.anchorView = firstNameLbl 
     ..profile.location = 'east center'; 
     //..profile.width = 'flex'; 
    parentVu.addChild(firstNameTBox); 
} 

Программа оказывает. Однако он не использует всю ширину браузера (FireFox). Я пробовал для TextBoxes profile.width = 'flex'

но он не работает.

Любая помощь приветствуется.

ответ

0

Firefox? Вы тестировали его с помощью Dartium? Обратите внимание, что вам нужно скомпилировать его в JS, прежде чем вы сможете протестировать его с помощью браузеров, отличных от Dartium.

Кстати, из вашей реализации NameView, похоже, не имеет отношения к parentVu вообще. Если это просто контроллер, он не должен распространяться на раздел (т. Е. Он не должен быть представлением).

+0

Здравствуйте tomyeh, спасибо за ответ. Приложение выполнено в Dartium, а не в Firefox. Как связать ParentVu с NameView. Я попытался использовать this.addChild (view), но он не работает. NameView - это представление. Я расширил раздел, чтобы получить преимущества idspace. Пожалуйста, рефакторинг моего примера, чтобы отразить изменения, которые вы считаете необходимыми. Thanks –

+0

Всё зависит от меня. Если NameView является родительским, вам просто нужно вызвать this.addChild (parentVu) (и вы НЕ должны вызывать parentVU.addToDocument, поскольку он больше не является корневым представлением). Тогда NameView - это обычный вид. Пожалуйста, обратитесь к [здесь] (http://docs.rikulo.org/ui/latest/View_Development/Build_with_Composite_of_Views.html) –

+0

Привет, Том, мне удалось создать ассоциацию, о которой вы говорили в своем ответе. Если я использую линейный макет, все работает отлично, а размер TextBox зависит от размера браузера. Я хотел бы, чтобы это было так же, как и мои эксперименты с компоновкой Якоря, поскольку это кажется более широко применимым. В вышеприведенном коде моего вопроса TextBox принимает свой размер по умолчанию с использованием используемого компоновки привязки. Если я раскомментирую строку, которая задает ширину макета ширины, размер TextBox значительно сокращается, и я не могу заставить его меняться в зависимости от размера браузера. Любая помощь приветствуется. Спасибо –

0

Если представление привязано к другому, то местоположение и размер будут зависеть от вида, который он закрепляет. В вашем случае, если указать flex для TextBox, его ширина будет такой же, как FirstNameLb1. Вот почему она такая маленькая.

Вы можете прослушивать событие макета, такие как:

firstNameTBox.on.layout.listen((_) { 
    firstNameTBox.width = parentVu.width; 
}); 

Примечание: Вы должны сделать некоторые вычисления, чтобы получить правильную ширину.

Смотрите также Layout Overview

+0

Спасибо за вашу помощь. Планируется ли удалить пользовательские расчеты, которые вы предложили, чтобы пользовательский интерфейс отображался по мере необходимости? Я использовал некоторые генераторы пользовательских интерфейсов Drag-n-Drop, например, WindowBuilder pro от Google, которые мне не нужны вообще. Я знаю, что Дарт/Рикуло - это новые идеи, но это простота использования, которая заставит их выдержать испытание временем. Возможно, должен быть пересмотрен алгоритм якоря Рикуло. Например, для того, что вы сказали выше, если B привязан к A, B отображает размер A, если используется «flex». Я думаю, что эти свойства должны быть дезагрегированы. Только опорная точка должна быть релевантной - не размер –

+0

В настоящее время интерфейс Rikulo UI обеспечивает линейную компоновку и бесплатную компоновку (ака, расположение якоря). Это определенно не охватывает все. Вы можете разработать свой собственный макет. Пожалуйста, обратитесь к [здесь] (http://docs.rikulo.org/ui/latest/Layouts/Fundamentals/Layout_Lifecycle_and_Customization.html) и исходному коду. –

+0

В ответе # 2, как я могу подойти к parentVu.width, должен отличаться от размера ширины браузера, т.е. «flex», как и его поведение –

Смежные вопросы