Handling all screen sizes android

16,983

Solution 1

May be you can try below library which manages all the screen size resolution automatically.

compile 'com.intuit.sdp:sdp-android:1.0.4'

You need to just add the dependency in your build.gradle file and you are done.

You need to specify like:

android:layout_height="@dimen/_10sdp"

Instead of:

android:layout_height="@dimen/10sdp"

Solution 2

//Dimen
implementation 'com.intuit.ssp:ssp-android:1.0.5'
implementation 'com.intuit.sdp:sdp-android:1.0.5'

use this two library, ssp is for text size, and sdp is for margin, padding and layout size

android:layout_width="@dimen/_24sdp"
android:layout_height="@dimen/_24sdp"

Solution 3

Create three different Layouts Folder in your res folder for all devices and use the dimensions accordingly.

Generic Layout Folders

res/layout-small
res/layout-normal
res/layout-large
res/layout-xlarge

After you are done with making your Normal/Medium Layouts follow these steps:

  1. Convert the Normal Dimensions for other Screen Sizes.
  2. Copy your Normal Layout xml files in to other Folders.
  3. Change the suffix of the dimensions used according to the folder that you are in
  4. Resize the Image Resources in your drawable folder (Width and Height - Same technique as we used for converting the dimens) and put them in their respective drawable folder (drawable-ldpi, drawable-mdpi, drawable-hdpi, drawable-xdpi and so on).
  5. Then your Layouts should work on every device with correct positioning.

For converting Values

0.75 - ldpi  (small)   //mdpi dimens *0.75
1.0  - mdpi  (normal)  //First create these dimensions
1.5  - hdpi  (large)   //mdpi dimens *1.5
2.0  - xhdpi (xLarge)  //mdpi dimens *2.0

For Example

android:layout_width="66dip" //in normal
android:layout_width="100dip"//in large 66*1.5=100(approx)
android:layout_width="52dip" //in small 66*0.75=52(approx)

Also new Qualifier has been introduced - SmallestWidth - AvailableScreenWidth - AvailableScreenHeight

read more about it here https://developer.android.com/guide/practices/screens_support.html

I hope this helps.

Share:
16,983

Related videos on Youtube

Amine boujida
Author by

Amine boujida

Updated on June 04, 2022

Comments

  • Amine boujida
    Amine boujida almost 2 years

    I'm working on an android App,and it's designed with numbers (margins etc) no relative things so I think I'll find many problems with different screen sizes so I thought of making a function which will keep the data in DIMENSIONS file proportional to user screen size like ( User's screen size X dimen)/(the screen size which the app were designed on), so I want to know if this won't cause any problem on App working etc ..

    Thank you =)

    • Gabe Sechan
      Gabe Sechan over 7 years
      There is no one solid answer to this. It really depends on your layout, the drawables you have, etc. Sometimes just scaling will work. Sometimes it won't (things won't fit when scaling down, images get too stretched, etc). Small margins (things in the low double digits especially in dp) typically scale well. Numbers in the 100s of pixels may not. Its part of your job as an Android engineer to figure out those relative and linear linkages and create a good layout from it. You can't expect to be handed everything, if you were you wouldn't be needed.
  • Benson Githinji
    Benson Githinji over 5 years
    I tried this library but its just enlarging everything
  • DragonFire
    DragonFire over 4 years
    The library seems pretty good, only thing it acts like a framework.. if you want more control then use different layout files... especially for image sizes
  • Arnold Brown
    Arnold Brown over 4 years
    can we use it programatically
  • Arnold Brown
    Arnold Brown over 4 years
    can we use it programatically
  • divaPrajapati09
    divaPrajapati09 over 4 years
    @ArnoldBrown yes you can
  • Arnold Brown
    Arnold Brown over 4 years
    @divaPrajapati09 yes I did this. Thanks
  • Rahul Kahale
    Rahul Kahale about 4 years
    @harshil-kakadiya In example they have 2 activities one using ssp and other example in other project using only sdp. I am following your recommendation, but can you explain why?
  • Mayank Sharma
    Mayank Sharma over 3 years
    @ArnoldBrown You can use below code to access dimen pragmatically. int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density)
  • Arnold Brown
    Arnold Brown over 3 years
    Use ssp for Text size and for remaining use sdp.