Mobile
Article

Is Onsen UI the Answer to Cordova UI Development?

By Jay Raj

Onsen UI is a new JavaScript and CSS framework for developing mobile apps. With its large selection of web based UI components, you can develop HTML5, PhoneGap and Cordova apps. With a focus on native-like performance, user experience, responsive design and diverse platforms, it seems quite promising. It combines the power of HTML 5 , CSS, AngularJS, jQuery and Font Awesome to create impressive looking apps.

Installation

To get started with Onsen UI, first make sure you have Node.js and npm installed.

Next, depending on the app platform for which you plan to develop, install the required Android or IOS platform dependencies. In this article, we’ll try to create an app for Android.

Cordova can be installed as shown below:

sudo npm install -g cordova

A number of templates are available from Onsen UI such as master details, sliding menu etc. We’ll be using the master detail template.

Download the template, extract it and navigate to the project root folder. Now, we’ll add the platform for which we’ll be developing the app. Add the platform as shown:

cordova platform add android

Once complete, type in the below command to emulate the template that we downloaded:

cordova emulate

Here is how it should look:

Home Screen Example

What we’ll be creating

In this tutorial, we’ll be designing our app using the Onsen UI components. The app will have a sign in, sign up page and page to list all registered users.
Once we are done with the design, we’ll hook up the app to Firebase.

You can find the final project on GitHub here

Designing Login Screen

Below is the folder structure of the template that we downloaded:

OnsenUI(root)
      -----> hooks
      -----> merges
      -----> platforms
      -----> plugins
      -----> www

The folder www contains the html, css and JavaScript files which we’ll modify to create our custom app.
I feel the best way to learn anything new is to start from scratch. Open up index.html and remove everything inside the body tag.

Onsen UI provides a number of components to create a UI. We’ll be using a few of these to design our screens.

In order to maintain a page stack, Onsen UI provides a component called ons-navigator. It acts as a container for all our pages. Inside this we’ll add another component called ons-page.

Here is how it should look:

<ons-navigator title="Navigator" var="myNavigator">
    <ons-page>
        // Page content comes here
    </ons-page>
</ons-navigator>

Inside the page add another component called ons-toolbar which acts as the toolbar.

We’ll also need to add a username and password input box. In order to add those, first we’ll add a list box and inside that we’ll include the input texts. To add list items, Onsen UI provides a component called ons-list.

Here is how it should look:

<ons-navigator title="Navigator" var="myNavigator">
    <ons-page>

        <ons-toolbar>
            <div class="center">Onsen UI App</div>
        </ons-toolbar>

        <ons-list>
            <ons-list-item>
                <input type="text" placeholder="Username" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;">
            </ons-list-item>


            <ons-list-item>
                <input type="password" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;">
            </ons-list-item>
        </ons-list>

    </ons-page>
</ons-navigator>

Next, we’ll add a button to sign in and for that we’ll use the ons-button component. Here is how the login screen looks after the above changes.

Designing Sign Up Screen

Next let’s add the Sign Up screen for the user to register with. The sign up screen should be accessible from the home screen. So, in the toolbar on the right side corner, add an icon for sign up. To add icons Onsen UI provides a component called ons-icon. Modify the ons-toolbar code as shown below:

<ons-toolbar>
      <div class="center">Onsen UI App</div>
      <div class="right">

        <ons-icon icon="ion-plus-circled" size="40px"</ons-icon>

      </div>
</ons-toolbar>

We’ll be defining the sign up page as a separate html fragment and for that we’ll make use of ons-template. The sign up html should have a toolbar, list items for input controls and a sign up button.

Here is the sign up template code:

<ons-template id="register.html">
    <ons-page>
        <ons-toolbar>
            <div class="left">
                <ons-back-button>Back</ons-back-button>
            </div>
            <div class="center">Register</div>
        </ons-toolbar>

        <div style="text-align: center">
            <br />
            <ons-page>


                <ons-list>
                    <ons-list-item>
                        <input type="text" placeholder="Username" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;">
                    </ons-list-item>

                    <ons-list-item>
                        <input type="text" placeholder="Email Address" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;">
                    </ons-list-item>
                    <ons-list-item>
                        <input type="text" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;">
                    </ons-list-item>

                    <ons-list-item>
                        <ons-row>
                            <ons-col width="90px">
                                <span style="color: #666">Gender</span>
                            </ons-col>
                            <ons-col>

                                <div style="float: right; padding-right: 16px;">
                                    <label class="radio-button">
                                        <input type="radio" name="level">
                                        <div class="radio-button__checkmark"></div>
                                        Male
                                    </label>

                                    <label class="radio-button">
                                        <input type="radio" name="level">
                                        <div class="radio-button__checkmark"></div>
                                        Female
                                    </label>
                                </div>

                            </ons-col>
                        </ons-row>
                    </ons-list-item>



                </ons-list>


                <div class="content-padded">
                    <ons-button modifier="large" onclick="">
                        Sign Up
                    </ons-button>
                </div>


            </ons-page>
        </div>
    </ons-page>
</ons-template>

Most of the components used in the code above are the same we used on the sign in page. The two new components used are ons-back-button and ons-row. ons-back-button is used to provide back button support and ons-row is used to represent a row in a grid system.

Finally in order to link the icon in the toolbar to the sign in page, add an onclick event to the icon. To navigate we’ll use ons-navigator’s pushPage method as shown below:

<ons-icon icon="ion-plus-circled" size="40px" onclick="myNavigator.pushPage('register.html', { animation : 'slide' } )"></ons-icon>

Here is a demo of the sign in and sign up page.

Conclusion

In this tutorial, we learned how to get started with mobile app development using Onsen UI. We designed a simple user registration and login app. In the next part of this tutorial, we’ll make the app functional by hooking it up with Firebase.

  • helloworlder

    On a philosophical level, it doesn’t look very much removed from Ionic. And both are built on top of Angular JS rather than trying to be JS framework agnostic. As with Ionic, looks pretty cool. But game changer? Nope.

    • Aldo Ziflaj

      Indeed. It looks more like an Ionic alternative to me.

  • Steve

    This requires AngularJS and Jquery? Those will bloat the app and slow it down.

    • Lucca Mendonça

      No, no; Onsen UI works with AngularJS, but doesn’t require jQuery at all; And it’s quite faster than jQuery Mobile!

  • http://www.whitepaperit.com/ Krrish Jacob

    This is an very nices blog and
    share this information

  • Codrut Bila

    When are you going to step forward with the next part of this tutorial?
    thks

  • Reza Rahmati

    Good article

  • vida

    stupid questions time here.. apologies in advance.

    On a mac (yosemite)

    Did: cordova platform add android

    Worked fine.

    But when I did: codova emulate

    I got errors:

    Running command: /Users/pj/Documents/Personal/Learning/onsen/jwtauth/onsenui-master-detail/platforms/android/cordova/run –emulator

    ERROR: Error: ANDROID_HOME is not set and “android” command not in your PATH. You must fulfill at least one of these conditions.

    Error: /Users/pj/Documents/Personal/Learning/onsen/jwtauth/onsenui-master-detail/platforms/android/cordova/run: Command failed with exit code 2

    at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:131:23)

    at ChildProcess.emit (events.js:110:17)

    at maybeClose (child_process.js:1015:16)

    at Process.ChildProcess._handle.onexit (child_process.js:1087:5)

    So, not sure what to do now.. can’t figure out what to set ANDROID_HOME to point to .. or where the ‘android’ command is.. so can’t put it on the path…

    This is probably glaringly obvious…

    Anyone able to put me out of my misery?

    Thanks in advance.

    • vida

      Ahh ok,

      So I had failed to understand the import of “Next, depending on the app platform for which you plan to develop, install the requiredAndroid or IOS platform dependencies.” Now that I’ve spent the 2 hours installing android its all working.. kinda…

Recommended
Sponsors
Because We Like You
Free Ebooks!

Grab SitePoint's top 10 web dev and design ebooks, completely free!

Get the latest in Mobile, once a week, for free.