Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to support all the different resolutions of android products

All the different resolutions of the different Android products are driving me nuts.

My first android app that I wrote was designed so it supported the three commonly used resolutions: 240x320 (LDPI), 320x480 (MDPI) and 480x800 (HDPI). The 480x854 didn't do any harm to the layout because it has the same width as 480x800.

I've also bought the following devices to test my android apps on: Samsung Galaxy Europe (LDPI) HTC Desire Z (HDPI)

Luckily my girlfriend has a HTC Wildfire S (MDPI) so I've got most resolutions covered.

But today, my brother downloaded my app on his new HTC Sensation which has yet another resolution 540x960 (HDPI?). Which didn't show my app as it should and probably the most tablets won't show it correctly either.

What I've did with my first app was read out the density and then set the parameters:

public void set_ui_parameters() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){
        textSize   = 35;    
        timeWidth  = 80;
        dayWidth   = 110;
        moneyWidth = 50;
    } else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){
        textSize   = 35;    
        timeWidth  = 53;
        dayWidth   = 73;
        moneyWidth = 33;
    } else if(metrics.densityDpi == DisplayMetrics.DENSITY_LOW){
        textSize   = 28;
        timeWidth  = 40;
        dayWidth   = 55;
        moneyWidth = 25;
    }
}

Besides the parameters I've also created drawables for LDPI, MDPI and HDPI. This works fine for the resolutions described above, but this depends on the screen resolution i.c.w. screen size and fails for, for example the HTC sensatoin with 540x960.

I know that not all the resolutions are used that often, but I would like to support as many as possible. Stats of Screen Sizes and Densities

I've read Supporting Multiple Screens multiple times but didn't found a clear answer to this "problem".

So should I read out the resolution and set the parameters according to the resolutions instead of density? Is this a smart thing to do or how do you cope with this?

Thanks a lot for your information!

like image 913
patrick Avatar asked Jun 19 '11 16:06

patrick


People also ask

How can I make Android apps compatible with all screen sizes?

Use Relative layouts, draw 9 images. And for high quality apps you may create different different layout XMLS for all 4 screen sizes.

How do I change the resolution on my Android?

Most modern Android devices will give you the option to adjust screen resolution in the Display options or Settings. To get there, look for the gear-like icon on the applications menu. It should be labeled as Settings. You can also swipe down and click on the Settings app from the drop-down menu.


1 Answers

You don't have to do that to support different densities. What you do is create different resources folders:

res/values-ldpi/dimens.xml
res/values-mdpi/dimens.xml
res/values-hdpi/dimens.xml

Then Android will decide which file to use. You can have something like:

<!-- in values-ldpi/dimens.xml -->
<dimen name="textSize">25dip</dimen>

and..

<!-- in values-mdpi/dimens.xml -->
<dimen name="textSize">20dip</dimen>

etc. And you shouldn't care about resolution... there are a lot of different resolutions sizes so it would be a hell to take decisions based on that.

Also, if you use dp instead of pixels, you hardly ever will have to create different dimensions files for each density. Of course, sometimes you have to, but it depends on the app.

like image 90
Cristian Avatar answered Oct 15 '22 13:10

Cristian