views:

65

answers:

2

Is it possible to customise the title bar in Java ME?

A: 

The API doesn't provide functionality for customising the default title bar, but we can attempt to write our own bar. This is in itself a minor breach of UI conventions. Some phones allow us to use setTitle(null) to remove the title. The phones in the Java mobile toolkit behave this way, but the Series 40 and 60 emulators don't seem to support this and instead generates a default title. On the other hand, the Sony Ericssons and Motorolas I've tested seem to support this.

However, we can detect whether the ability to remove the titlebar is present. We do not use the sizeChanged callback as the calling of this function may be delayed when the canvas is not visible. Instead we call getHeight both before and after removing the bar. According to the spec, getHeight should always return the correct and up to date value, even when the canvas is not being displayed. Here is code for implementing the detection:

public static boolean HIDE_TITLE_ENABLED;//Whether the implementation allows us to hide the title bar
static{
    //See if we can remove the title by ensuring it is non-nil, then attempting
    //to remove it. If we can't, then reset it.
    Canvas c=new Canvas(){
        protected void paint(Graphics g){
        }
    };
    c.setTitle("test");
    int preHeight=c.getHeight();
    c.setTitle(null);
    int afterHeight=c.getHeight();
    HIDE_TITLE_ENABLED=preHeight!=afterHeight;
}

It is also possible to hide the title bar using full screen mode, but this hides other elements as well. This method is popular in games.

Casebash
+1  A: 

You might like to check out J2ME Polish, which provides a massive amount of UI customisation for MIDlets, including the title bar: link text

KevinD
J2ME Polish looks nice - but costs money
Casebash
Only for commercial purposes... (And its not much)
KevinD