2014-06-18 4 views
1

Я люблю Scaloid, но я изо всех сил пытаюсь получить какой-либо макет, работающий за простой вертикальный стек элементов пользовательского интерфейса, включая пример своей домашней страницы. Это пример кода на сайте scaloid в:макет кастоидального примера не работает

new SVerticalLayout { 
     STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>> 
     STextView("ID") 
     SEditText() 
     STextView("Password") 
     SEditText() inputType TEXT_PASSWORD 
     SButton("Sign in") 
     this += new SLinearLayout { 
     SButton("Help") 
     SButton("Sign up") 
     } 
    }.padding(20 dip) 

Чтобы попробовать это, я сделал это:

class MyActivity extends SActivity { 

     onCreate { 

     contentView = new SVerticalLayout { 
      STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>> 
      STextView("ID") 
      SEditText() 
      STextView("Password") 
      SEditText() inputType TEXT_PASSWORD 
      SButton("Sign in") 
      this += new SLinearLayout { 
      SButton("Help") 
      SButton("Sign up") 
      } 
     }.padding(20 dip) 
     } 
} 

Однако, когда я пытаюсь это на мой телефон (Nexus 5 в портретной ориентации), то " Зарегистрироваться "не появляется. Кнопка «Справка» охватывает ширину экрана. Я ожидаю, что SLinearLayout создаст горизонтальную компоновку, встроенную в SVerticalLayout, и что я увижу две кнопки рядом.

Так три вопроса:

1) Является ли scaloid пример правильно?

2) Я правильно вставляю его в свой код? т. е. установка contentView в SVerticalLayout?

3) Как мне изменить его, чтобы кнопки справки и регистрации появлялись рядом друг с другом?

ответ

1

Я автор примера. Это ошибка. Благодаря!

Каждый виджет Scaloid устанавливается по умолчанию android:layout_width="match_parent" android:layout_height="wrap_content". Поскольку кнопка «Справка» заполняет родителя, «Зарегистрироваться» не отображается.

Решение состоит в том, что добавление .wrap. Весь код становится:

new SVerticalLayout { 
    STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>> 
    STextView("ID") 
    SEditText() 
    STextView("Password") 
    SEditText() inputType TEXT_PASSWORD 
    SButton("Sign in") 
    this += new SLinearLayout { 
    SButton("Help") 
    SButton("Sign up") 
    }.wrap 
}.padding(20 dip) 

Функция .wrapWRAP_CONTENT применяется для ширины и высоты:

https://github.com/pocorall/scaloid#methods-fill-and-wrap

+0

Спасибо очень много. Было бы полезно добавить примечание о умолчанию к readme doc и объяснение того, что. <>. Что значит . <> сделать? – Jake

+0

Я добавил описание об этом. – pocorall

+0

Это прекрасно - спасибо. – Jake

1

Я понял. Эти две кнопки появляются в строке, если явно указать свои ограничения, например, так:

SButton("Help").<<(WRAP_CONTENT, MATCH_PARENT) 

Исправленный пример:

contentView = new SVerticalLayout { 
    STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>> 
     STextView("ID") 
    SEditText() 
    STextView("Password") 
    SEditText() inputType TEXT_PASSWORD 
    SButton("Sign in") 
    this += new SLinearLayout { 
     SButton("Help").<<(WRAP_CONTENT, MATCH_PARENT) 
     SButton("Sign up").<<(WRAP_CONTENT, MATCH_PARENT) 
    } 
    }.padding(20 dip) 
Смежные вопросы