Package org.gnome.adw

Class NavigationView

java.lang.Object
All Implemented Interfaces:
Proxy, Swipeable, Accessible, Buildable, ConstraintTarget

@Generated("io.github.jwharm.JavaGI") public final class NavigationView extends Widget implements Swipeable, Accessible, Buildable, ConstraintTarget
A page-based navigation container.

navigation-view

AdwNavigationView presents one child at a time, similar to Stack.

AdwNavigationView can only contain NavigationPage children.

It maintains a navigation stack that can be controlled with push(org.gnome.adw.NavigationPage) and pop(). The whole navigation stack can also be replaced using replace(org.gnome.adw.NavigationPage[]).

AdwNavigationView allows to manage pages statically or dynamically.

Static pages can be added using the add(org.gnome.adw.NavigationPage) method. The AdwNavigationView will keep a reference to these pages, but they aren't accessible to the user until push(org.gnome.adw.NavigationPage) is called (except for the first page, which is pushed automatically). Use the remove(org.gnome.adw.NavigationPage) method to remove them. This is useful for applications that have a small number of unique pages and just need navigation between them.

Dynamic pages are automatically destroyed once they are popped off the navigation stack. To add a page like this, push it using the push(org.gnome.adw.NavigationPage) method without calling add(org.gnome.adw.NavigationPage) first.

Tags
Static pages, as well as any pages in the navigation stack, can be accessed by their NavigationPage:tag. For example, pushByTag(java.lang.String) can be used to push a static page that's not in the navigation stack without having to keep a reference to it manually.

Header Bar Integration
When used inside AdwNavigationView, HeaderBar will automatically display a back button that can be used to go back to the previous page when possible. The button also has a context menu, allowing to pop multiple pages at once, potentially across multiple navigation views.

Set HeaderBar:show-back-button to FALSE to disable this behavior in rare scenarios where it's unwanted.

AdwHeaderBar will also display the title of the AdwNavigationPage it's placed into, so most applications shouldn't need to customize it at all.

Shortcuts and Gestures
AdwNavigationView supports the following shortcuts for going to the previous page:

  • Escape (unless NavigationView:pop-on-escape is set to FALSE)
  • Alt+
  • Back mouse button

Additionally, it supports interactive gestures:

  • One-finger swipe towards the right on touchscreens
  • Scrolling towards the right on touchpads (usually two-finger swipe)

These gestures have transitions enabled regardless of the NavigationView:animate-transitions value.

Applications can also enable shortcuts for pushing another page onto the navigation stack via connecting to the NavigationView::get-next-page signal, in that case the following shortcuts are supported:

  • Alt+
  • Forward mouse button
  • Swipe/scrolling towards the left

For right-to-left locales, the gestures and shortcuts are reversed.

NavigationPage:can-pop can be used to disable them, along with the header bar back buttons.

Actions
AdwNavigationView defines actions for controlling the navigation stack. actions for controlling the navigation stack:

  • navigation.push takes a string parameter specifying the tag of the page to push, and is equivalent to calling pushByTag(java.lang.String).
  • navigation.pop doesn't take any parameters and pops the current page from the navigation stack, equivalent to calling pop().

AdwNavigationView as GtkBuildable
AdwNavigationView allows to add pages as children, equivalent to using the add(org.gnome.adw.NavigationPage) method.

Example of an AdwNavigationView UI definition:

<object class="AdwNavigationView">
   <child>
     <object class="AdwNavigationPage">
       <property name="title" translatable="yes">Page 1</property>
       <property name="child">
         <object class="AdwToolbarView">
           <child type="top">
             <object class="AdwHeaderBar"/>
           </child>
           <property name="content">
             <object class="GtkButton">
               <property name="label" translatable="yes">Open Page 2</property>
               <property name="halign">center</property>
               <property name="valign">center</property>
               <property name="action-name">navigation.push</property>
               <property name="action-target">'page-2'</property>
               <style>
                 <class name="pill"/>
                </style>
             </object>
           </property>
         </object>
       </property>
     </object>
   </child>
   <child>
     <object class="AdwNavigationPage">
       <property name="title" translatable="yes">Page 2</property>
       <property name="tag">page-2</property>
       <property name="child">
         <object class="AdwToolbarView">
           <child type="top">
             <object class="AdwHeaderBar"/>
           </child>
           <property name="content">
             <!-- ... -->
           </property>
         </object>
       </property>
     </object>
   </child>
 </object>
 

navigation-view-example

CSS nodes
AdwNavigationView has a single CSS node with the name navigation-view.

Accessibility
AdwNavigationView uses the GTK_ACCESSIBLE_ROLE_GROUP role.