Portrait for phone, landscape for Tablet (Android-Layout)

Setting a particular orientation based on device density may not work because there are phones which have higher densities than tablets.

What I did was to disable the device's orientation sensor by setting the attribute in the activity tag in the manifest file like this:

android:screenOrientation="nosensor"

When you run your app, by default portrait orientation is set for phones and landscape for tablets(and hence it'll select the xml file from layout-xlarge-land). And since you've set an orientation lock, it remains in this orientation.


You can measure the actual size (in inches) of the device and then programmatically set the orientation using:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

or

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

To get the physical size of the device you can use the code published here.

It is not 100% accurate, but it is good enough to decide what king of device is running the app.