In my Android App i use different Android Resource Directories to support multiple screen sizes and orientations. So inside res i have a layout folder, a layout-land folder, a layout-large folder, a layout-large-land folder and so on.
This approach worked perfectly for me until i tried installing my app in a newer phone that has a 18:9 display instead of a 16:9 one.
This phone draws the resources from the layout and layout-land folders, meaning that it is getting registered as a "normal" screen.
Moreover, if i try getting the screen size of this phone using the following piece of code,
int screenSize = getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK;
switch(screenSize) {
case Configuration.SCREENLAYOUT_SIZE_XLARGE:
Toast.makeText(this, "Extra Large Screen", Toast.LENGTH_LONG).show();
break;
case Configuration.SCREENLAYOUT_SIZE_LARGE:
Toast.makeText(this, "Large Screen", Toast.LENGTH_LONG).show();
break;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
Toast.makeText(this, "Normal Screen", Toast.LENGTH_LONG).show();
break;
case Configuration.SCREENLAYOUT_SIZE_SMALL:
Toast.makeText(this, "Small Screen", Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(this, "Screen size is neither xlarge, large, normal or small", Toast.LENGTH_LONG).show();
}
then it once again gets registered as a normal screen. But so does the phone with the 16:9 display. Needless to say this creates small but noticeable differences in how the app looks on those two phones.
So my question is, is there a way to differentiate those two displays?
Note: I am aware that there are workarounds around this, like avoiding dp values altogether and just using weights but what i'd like to know is if there is an "official" or "advised" method to treat this case. Much like the layout-land folder for landscape orientation or layout-xlarge folder for extra large screen and so on.
Thanks in advance.