Archives

Windows Phone 8 and 7 – Locking the aspect ratio to portrait or landscape

I love apps that support orientation changes, it helps the user see content when they’re tucked up in bed, or just busting a gut on the way to work on the train. Sometimes however they are not suitable, or there might be bugs with one mode and not the other, and disabling a troublesome orientation might be the wisest move rather than drop quality. Here’s how you can do it in Windows Phone apps.

In MainPage.xaml, in the phone:PhoneApplicationPage section, add or change the following properties to set the available orientations to one of:

SupportedOrientations=”Portrait” 

SupportedOrientations=”PortraitOrLandscape”

SupportedOrientations=”Landscape”

You can then set the initial orientation to one of:

Orientation=”Portrait”

Orientation=”Landscape”

Advertisements

JQueryMobile+PhoneGap hints/hacks for Windows Phone 8.0/iOS/Android

[IE10] JQuery Mobile data-role=”footer” appears 50px too high

When porting a LOB (Line Of Business) JQueryMobile App to Windows Phone 8.0, an instant surprise was the standard data-role=”footer” div was 50px too high. Trying to adjust the padding, position or boundaries simply clipped it incorrectly. I haven’t yet tried to see if iScroll would help with this (a common suggestion).

Even with a device-width and device-height tag in the meta tag or explicitly in css, it didn’t position correctly, and scrollable lists would appear to overflow underneath it. I discovered that by setting the device width explicitly to 320px (The value which made the text look ok on the specific device), suddenly the footer snapped. Anyone know what’s going on, please tell me!

However this still left a 1px gap at the bottom (and 1px gap at the top when the phone was in landscape mode!). This can be further fixed by setting (in my case) the height to 534px. This had the unfortunate consequence that if the keyboard popped up, the view would zoom out to fit – not what an app needs.  Maybe conditionally setting the viewport based on text focus could get round this (hacks on-top of hacks). But there has to be a better way?

So, for now, this is my ‘hack’, until I discover more.

/* for ie 10 adjust the viewport, this appears to make the footer almost perfect in its position*/

@media screen and(orientation: portrait) {

@-ms-viewport {

width: 320px;

height: 534px; /*this fixes the footer 1px issue, however, keyboards will now cause the entire page to zoom out*/

user-zoom: fixed;

zoom:1;

} }

[IE10] Portrait mode is zoomed out too far

On my Nokia Lumia 920, the app didn’t look ‘appy’, so to make sure that the portrait mode isn’t zoomed out too much I also added another media query.

@media screen and(orientation: landscape) {

@-ms-viewport {

width: 540px; /* use media queries to be more intelligent */

user-zoom: fixed;

zoom:1;

} }

[IE10] Disable link highlighting

To make sure a big grey selection rectangle doesn’t slap its ugly face all over your work, add this to your <head>.

<meta name=”msapplication-tap-highlight” content=”no” />

[WebKit+IE10] Stop default link following/opening popups

Add this css to whereever you need it.

-webkit-touch-callout:none; /*stops link following in external browsers*/

-ms-user-select : none; /* ie 10.0 version */

[WebKit+IE10] Prevent selections except for within inputs.

Add the following CSS

*:not(input)

{

-webkit-user-select: none; /*stops selections – except for inputs*/

-ms-user-select : none; /* ie 10.0 version */

}

[WP8.0/IE10] Prevent full view bouncing once scrollable lists complete

It’s really, really frustrating. You want touch gestures and scrollable lists, but the default phonegap project structure makes the whole view bounce, and drag down/up when you hit limits. Bounce is acceptable within the non-fixed areas of your app, but the headers and footers need to keep in place.

This was fixed on iOS with DisableOverscroll or UIWebViewBounce settings in config.xml (can’t remember which one worked), but no such fix for WP8.0 as i can see it. If someone suggests -ms-touch-action :none, please please provide an example html and CSS that allows a ul to be scrolled in the way I’ve specified.

 

[All] Remove highlighting border from tick boxes when they have focus

div.ui-checkbox label.ui-focus {

box-shadow: none;

}

Debugging CSS in Mobile Phone Applications – live

This post is focused on helping you debug CSS styles and DOM for HTML Apps while they are executing on the device or simulator.

The instructions originate from a Windows 8, Visual Studio 2012 and Windows Phone 8 perspective, but the mechanisms apply to Android and iOS development too.

We are going to use an open source tool called Weinre to connect the device and your favourite Webkit web browser together. You’ll be able to highlight DOM elements, and change styles live in Chrome if you follow these instructions.

1. First you need the node.js command line.

Visit nodejs.org/download

Download and install the windows package.

2. Install Weinre

Go to your Windows 8 start screen, or the Start Menu and run the Node.js command prompt.

Node.js command prompt

You should see this window:

Nodejsopen

In the command prompt type

npm -g install weinre

You should see it getting a number of packages.

3. Prepare to launch Weinre (pronounced Winery by many)

Before we launch weinre, we need some information. A port number and IP/hostname.

For LAN debugging, use an ip address or a machine name, for outside of the LAN, you’re going to have to use a fixed IP or accessible DNS name. On a command line use “ipconfig” to determine your IPv4 address.

You can pick a port number (in my examples below I used 1234), and Windows will prompt you to unblock the port (but if you run into trouble, configure it manually).

4. Launch Weinre

In your node command prompt, type

weinre --httpPort xxxx --boundHost y.y.y.y

Where xxxx is the port number of your choice (8080 if you don’t specify it) and y.y.y.y is your IP address (or accessible DNS name).

You should see some output like this, and probably a firewall rule request will popup (ok it).

WeinreRunning

5. Prepare your HTML app

In your HTML App, put the following line of code whereever you like (preferably early).

<script 
src="http://y.y.y.y:xxxx/target/target-script-min.js">
</script>

6. Run your app in the windows phone emulator (or ADT/iOS Simulator)

7. To view your mobile app’s browser styles/DOM and change them via Chrome

Open Chrome and type in

http://y.y.y.y:xxxx/client

You should be able to now use page inspection, Elements, console but not debug javascript. 😦