Reputation: 193
I want to support my android screen in multiple screen sizes but i can do it with maintaining multiple xml layout file's
but according to requirement it i supposed to be done with the single XML layout in order to optimize the app usage.
so please can you help me i have gone through multiple tutorials multiple links but not able to get last option with stack overflow
Upvotes: 10
Views: 20526
Reputation: 752
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 usual:
android:layout_height="@dimen/10dp"
Upvotes: 3
Reputation: 11457
Well that depends on your code
Drawables
Use every DPI
FolderLook at these Links
1)https://developer.android.com/training/multiscreen/screensizes.html
2)How to support different screen size in android
3)Supporting multiple screen size - Android
Upvotes: 1
Reputation: 3622
drawable:
For images, you have to manage different drawable folders as per screen resolution:
drawable-ldpi //240x320
drawable-mdpi //320x480
drawable-hdpi //480x800
drawable-xhdpi //720x1280
drawable-xxhdpi //1080X1920
drawable-xxxhdpi //1440X2560
drawable-tvdpi // nexus 7 etc
drawable-xlarge-xhdpi //tablet like nexus 10
dimes: For dimens, If you are using different static dimes as per your UI then you have to define them respected to their values... folders.
Values folder for different smart phones resolutions:
values-ldpi\dimens.xml
values-mdpi\dimens.xml
values-hdpi\dimens.xml
values-xhdpi\dimens.xml
values-xxhdpi\dimens.xml
values-xxxhdpi\dimens.xml
Note: If you are using sp/sip/dp/dip then these values will be adjusted based on the density of device. e.g Suppose you had set 10sp for TextView in mdpi(320X480) resolution device. Then this same value will be auto adjusted for other resolutions.
mdpi(10sp==10px)
hdpi(15px)
xhdpi(20px)
xxhdpi(30px)
xxxhdpi(40px)
These are the some general usage values folder which are used to manage dimens related to their screen resolutions.
Different values folder for different screens:
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxxhdpi 1440X2560 xxxhdpi
values-xxhdpi 1080X1920 xxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
For knowledge in depth go with Support screen resolution
Upvotes: 21
Reputation: 804
If you want to use single layout and that should support all the screens like ldpi, , mdpi, hdpi, x-hdpi, xx-hdpi then you have to use weight in your layout that will handle screen size for all the screens.
Here’re a few things:
If you want to divide the space equally between Views with the same weight – set 0dp as Views’ width.
If you set View width to wrap_content – size of the Views will depend on weight and content inside each View.
Upvotes: 0
Reputation: 6277
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:
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.
Upvotes: 7
Reputation: 1616
You can define multi dimen files, and add dimensions of each view according to screen size in there. You can find detailed answer here
A set of six generalized densities:
Here is the official docs
Upvotes: 0
Reputation: 18933
There are three ways to do this :
1) Put your images and icon in different drawable
folder including drawable-mdpi
, drawable-hdpi
, drawable-xhdpi
, drawable-xxhdpi
, drawable-xxxhdpi
which will be access image from particular folder based on screen resolutions. Don't apply fixed values everywhere for image. Fixed dimensions can be vary with different device and image will be looked stretch. So use wrap_content
2) Set dimensions in dimens.xml
for different values
folder.
values-mdpi\dimens.xml
values-hdpi\dimens.xml
values-xhdpi\dimens.xml
values-xxhdpi\dimens.xml
values-xxxhdpi\dimens.xml
3) Use LinearLayout
with proper using of android:layout_weight
.
Upvotes: 0
Reputation: 13555
try this https://developer.android.com/guide/topics/manifest/supports-screens-element.html
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
Upvotes: 0
Reputation: 2545
If you provide text size as sp and other dimensions as dp. Android will automatically adjust for different layouts based on density of devices. If you want to control the values, you can put values in dimens.xml in each of values folders. The values folder inside res for different density devices will be following :
values-ldpi\dimens.xml
values-mdpi\dimens.xml
values-hdpi\dimens.xml
values-xhdpi\dimens.xml
values-xxhdpi\dimens.xml
values-xxxhdpi\dimens.xml
Upvotes: 2