Подход к макету вкладок Nativescript

Я пытаюсь создать приложение с NativeScript со следующим макетом:

  1. Сверху панель действий
  2. Область контента в центре (около 80% высоты экрана)
  3. Фиксированное меню внизу с 4 кнопками

Я знаю, что NativeScript предоставляет TabView, однако это представление помещает меню сверху для версии приложения для Android и не позволяет использовать изображения в качестве "ItemTitle".

Итак (я думаю), это оставляет мне два варианта:

  • Создайте 4 разные страницы и загружайте их, когда пользователь нажимает на кнопки меню.

  • Создайте одну единственную страницу и измените содержимое в соответствии с выбором пользователя

Первый подход великолепен, потому что я разделяю все файлы xml, js и css. Однако навигация между страницами может занять некоторое время и не обеспечивает идеального взаимодействия с пользователем. Второй подход, вероятно, будет иметь лучший пользовательский интерфейс, но код будет очень сложно поддерживать.

Какой вариант следует использовать? Кто-нибудь из вас имел дело с подобным макетом? Спасибо за ваше время!


person Aaron Ullal    schedule 18.05.2016    source источник


Ответы (1)


В моем приложении я использую TabView с частичными представлениями в каждом элементе вкладки. Таким образом, для каждой вкладки содержимое разделяется на собственные файлы xml, js, css.

Так почему бы просто не использовать этот подход и не объединить его со вторым вариантом?

Вы можете создать основной вид с помощью:

  • Панель действий
  • Центральный основной контент для частичных представлений (Stack-og GridLayout)
  • SegmentedBar внизу для кнопок навигации

Когда пользователь нажимает кнопку на SegmentedBar, вы меняете видимость соответствующего частичного представления.

Вы также можете использовать любые значки шрифтов в качестве «изображений» для вашего заголовка в SegmentedBar.

ОБНОВЛЕНИЕ: Добавлены примеры ниже.

Как создавать частичные представления и ссылаться на них

В элементе страницы основного представления добавьте ссылки на каждое частичное представление, как здесь:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded" 
xmlns:t1="partial-views/tab1" 
xmlns:t2="partial-views/tab2" 
xmlns:t3="partial-views/tab3">

Каждое частичное представление состоит из файла .xml, .js и, возможно, файла .css. Мне нравится размещать каждый частичный вид в отдельных папках: например, tab1, tab2, tab3.

XML-файл частичного просмотра будет содержать только модули просмотра, а не модули страниц. Так что не добавляйте сюда никакую страницу или панель действий. Пример частичного представления .xml:

<GridLayout loaded="viewLoaded">
  <ListView items="{{ someItemList }}">
   <ListView.itemTemplate>
     ...
    </ListView.itemTemplate>
  </ListView>
</GridLayout>

Как использовать частичные представления

Теперь вам решать, как вы хотите использовать частичные представления. Вот пример того, как использовать их вместе с компонентом TabView. Он размещается в том же представлении страницы, где вы добавили ссылки из первого примера.

<TabView>
  <TabView.items>

    <TabViewItem title="Tab 1" iconSource="res://tab1">
        <TabViewItem.view>
            <t1:tab1 /> 
        </TabViewItem.view>
    </TabViewItem>

    <TabViewItem title="Tab 2" iconSource="res://tab2" >
        <TabViewItem.view>
            <t2:tab2 />
        </TabViewItem.view>
    </TabViewItem>

    <TabViewItem title="Tab 3" iconSource="res://tab3" >
        <TabViewItem.view>
            <t3:tab3 /> 
        </TabViewItem.view>
    </TabViewItem>

  </TabView.items>
</TabView>

Или вы можете сделать это без TabView и создать что-то нестандартное:

<StackLayout>
  <t1:tab1 id="tab1" visibility="visible" /> 
  <t2:tab2 id="tab2" visibility="collapsed" /> 
  <t3:tab3 id="tab3" visibility="collapsed" /> 
</StackLayout>

<SegmentedBar selectedIndex="0" selectedIndexChanged="segBarSelected">
  <SegmentedBar.items>
    <SegmentedBarItem title="Tab 1" />
    <SegmentedBarItem title="Tab 2" />
    <SegmentedBarItem title="Tab 3" />
  </SegmentedBar.items>
</SegmentedBar>

Так что здесь будет selectedIndexChangedконтролировать видимость каждого частичного представления.

person Manijak    schedule 19.05.2016
comment
Это звучит здорово! Если у вас есть фрагмент кода, которым вы можете поделиться, это будет здорово! Спасибо за помощь! - person Aaron Ullal; 19.05.2016
comment
Хорошо, я обновил свой комментарий и добавил несколько примеров. Думаю, это охватывает основной шаблон для частичных представлений. - person Manijak; 19.05.2016