androidresponsive-designdpiandroid-resolutionppi

Android | Why do activity look different on two different phones with same resolution as well as same screen size?


Scenario

I am developing a random app and recently i encountered a problem. I run a same application on Google pixel 3a xl android emulator and Asus X00TD physical device. And I got to know that in asus phone UI got really changed.

Pixel 3a XL display specs :

Display size : 6.0 inch Resolution : 2160 × 1080 ppi : 402ppi

Asus X00TD display specs :

Display size : 6.0 inch Resolution : 2160 × 1080 ppi : 403ppi

You see It's almost same only ppi is different and i don't think so that will make some big difference. roughly 6 pixels will be affected and that's not gonna change whole UI. I don't know the dpi resolution of the asus x00td. And I can't find on internet too.

This is the UI difference between pixel 3a xl and asus x00td.

6.0 inch mobile comparision

As you can see there's big difference between emulator and physical phone. So, I have 2 questions

  1. There's a way to calculate dpi by function. but, What if I don't have a phone and still want to know dpi res of that phone?

  2. Why there is a big difference between emulator and physical phone?

EDIT

I tried to calculate it on internet but, it gave me 0.0631mm dot pitch. which i am not able to understant what it is. Also emulator shows that pixel 3a xl has 400dpi resolution.

So, What is difference between 400dpi and 0.0631mm dot pitch?

SOLUTION I TRIED

I tried to emulate the asus device in emulator by setting smallest width to 360dp. Initially it looked same as asus. and emulator was picking xhdpi file of dimens.xml. So, I made changes in dimens.xml of xhdpi but, asus didn't pick that file. instead it picked xxhdpi file. Which is used in another device Realme 3 pro. I can't modify xxhdpi file because it's gonna mess up UI for all the 6+ inch display phones. and at the same time asus is still picking xxhdpi file and asus's UI is messed up.

Can't find a solution to this.


Solution

  • As explained upper by snachmsm, Layout qualifiers are most helpful in acheiving display responsiveness.

    In my case it was the asus x00td which wasn't displaying the content correctly. SO, to fix that,

    I used height qualifier value ofheight which resulted in minimum height.. So, devices with height of 600dp or above will be using dimens.xml(h600dp). So, asus picked up this file. As well as I created file for 700dp as well which has slighly bigger dimensions for large display like realme 3 pro.

    Plus I used constraint layout guidelines percentages to rearrange views in manner that margins will be adjusted automatically.

    So, dimensions and sizes are controlled by dimens.xml and margins are automatically controlled by constraint layout.