Libgdx weird issue with button touch coordinate

I’m trying to work on a screen with an options button. Currently my code works perfect on desktop but on my mobile device, when I touched the options button, it did changes color but doesn’t switch to the next screen. I found out that the real triggering point is at the bottom left of the screen which I’ve no idea why. Hope someone could shed some light here. Thanks.

This is my current code:

public class GameScreen implements Screen {

	public GameScreen( ) {
		screenWidth = Gdx.graphics.getWidth();
		screenHeight = Gdx.graphics.getHeight();
		
		cam = new OrthographicCamera();
		cam.setToOrtho(false, VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
	}


@Override
	public void show() {
		stage = new Stage( );
		Gdx.input.setInputProcessor(stage);

		TextureAtlas buttons = new TextureAtlas( Gdx.files.internal("data/milk.txt") );
		Skin skin = new Skin( buttons );
		
		ImageButtonStyle btnStyle = new ImageButtonStyle();
		btnStyle.up = skin.getDrawable( "optionsBtn");
		btnStyle.down = skin.getDrawable( "optionsBtn");
		
		ImageButton button = new ImageButton(btnStyle);
		button.setBounds( ZBGame.VIRTUAL_WIDTH/2-(121/2), ZBGame.VIRTUAL_HEIGHT/2-100,
 						button.getWidth(), button.getHeight());

		button.addListener(new ClickListener( ) {
				public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
					game.setScreen(new OptionScreen( game ) );
					return true;
				}
			});
        }


@Override
	public void render(float delta) {
		Gdx.gl.glClearColor(1, 1, 1, 1);
		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		
		if( Gdx.input.justTouched( ) ) {
			Vector3 touchPos = new Vector3();
			touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
			ZBGame.cam.unproject(touchPos);
			
			Actor actor = stage.hit( touchPos.x, touchPos.y, true );

			if( actor != null ) {
				// change the button color
				// Its working on mobile device when touch but not changing screen.
				actor.setColor((float)Math.random(), (float)Math.random(),
								(float)Math.random(), 0.5f+0.5f*(float)Math.random());
			}
		}
		
		stage.act(delta);
		stage.draw();
	}
}