Android drawable images for different resolutions - android

I remember seeing somewhere that there was some way, or some tool where you give it an image and it automatically scales and generates multiple images for different resolutions but I can't seem to find it.
Does anyone know what I'm describing and where to find it?

Found what I was looking for, Android Asset Studio.
http://android-ui-utils.googlecode.com/hg/asset-studio/dist/icons-launcher.html

Related

Creating a Android Icon Pack

I've just finished creating a bunch of icons in Adobe Illustrator for my Android phone. My problem is now, how can I make an icon pack like those you can download from the Play Store? You might think that there must a lot tutorials for this purpose, but I don't seem to find them useful, and it confuses me more than it benefits.
Any help will be appreciated.
Thanks in advance.
Try this instrument (Icon generators allow you to quickly and easily generate icons from existing source images, clipart, or text.): https://romannurik.github.io/AndroidAssetStudio/
Firstly, whichever icon you go with you will need different resolutions of it such as ldpi, mdpi, hdpi, etc.. and that can be done in two ways,
Manually by making each image the correct size
Using a asset generator like Android Asset Studio https://romannurik.github.io/AndroidAssetStudio/index.html
In terms of creating the actual icon, you dont need any specific "Android Icon Tutorial". You can use any generic logo or icon tutorial and just create it in the correct size. Read this link for icon sizes:
https://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
Then you can simply watch and "logo" or "icon" tutorial and follow along. Then I would use Android Asset Studio to create all DPI's
And this one for other icons:
https://developer.android.com/guide/practices/ui_guidelines/icon_design.html

Android: How to load a vector drawable image into a webview?

Sorry if this is a repeat but I searched diligently and didn't find this question asked yet...
So back in ye olden days of Android, you could just add something like this to a WebView's source html:
<img src='file:///android_res/drawable/my.png'/>
And it would display my.png correctly in the WebView. But-- Android now supports (and prefers we use) these new-fangled vector drawables, and Android Studio's Vector Asset Studio makes it really easy to import them from SVG files or whatever.
The great thing is that for backwards compatibility, .pngs are automatically generated during the build for various dpi/screen sizes to support older devices. So if you're targeting an older device, there are .png images there.
If only I could reach them. Because, as far as I can tell, using vector graphics does break those file:///android_res/drawable/ img links in WebViews. Which is weird, because as I say there are .png files to see, if it only looked.
I've thought about a few methods to fix this, but none have worked:
Since .pngs are generated on-the-fly and are included in the .apk, I thought maybe I could point directly to one of the generated files with something like file:///android_res/drawable-hdpi-v4/my.png. (I checked the .apk file and that's where one of them was..) But no such luck there. Broken image.
Okay, I thought-- maybe there's a way to get the WebView to display the vector objects directly. That is, maybe the WebView would recognize an <img src="file:///android_res/drawable/my_image.xml"/> or something similar. I mean, Chrome can render svg right? Maybe it supports the .xml vector format too. But no dice here either. (Even if it had worked, it would be unlikely to support older pre-chromium webview versions.)
The third thing I tried is to include just one xxxhdpi-sized .png in res/drawable so that the webview would find it and hopefully display it. Unfortunately, this doesn't work either. It appears that just having an .xml vector in /drawable is enough to have it block the png, no matter if it's in the /drawable or /drawable-xxxhdpi directories.
So the obvious question: Is there a way to get the WebView to either display the vector xml (or the associated support .png that was generated)? How do we access drawables from HTML in a WebView w/Vector drawables? Esp. without having to do anything programmatically?
Anyone know how this is supposed to work? I guess the next thing to do is delve into the chromium/android source to try to find out how file:///android_res/drawable/ works, but that doesn't sound fun, so if anyone has an answer, that would be helpful.
I'm probably missing something really obvious here. Thx in advance!
Update: Other things I tried/ruled out include (1) removing underscores in image names (as I thought they might be replaced with "/"), (2) various permutations of baseurl in loadDataWithBaseUrl()
Well, four years later and the best solution I've come up with is just to have two vector files-- (1) the xml Android vector file for the app, and then (2) the identical image in the .svg format for the webview. This is still a smaller solution compared with providing a seperate .png or .gif for every dpi, etc.
SVG and the vector format are internally very similar, so it's not difficult to convert one to the other. In fact, Android Studio will convert SVG->XML. If you want to go the other way, just compare a few examples.
So just put your svgs in assets/svg/, and then you can access from a webview using <img src='file:///android_asset/svg/mysvg.svg'/> in your HTML.
There's still a storage hit. But svgs are relatively tiny (and you can minify-- ie, scoop out some of the extra fluff in the SVG file that isn't used by the webview) so it's not as bad as the alternative-- providing large binary image files in the apk.

where drawable-hdpi ,drawable-mdpi ,drawable-xhdpi and drawable-xxhdpi. go?

before when I was creating a new project I was found this folders drawable-hdpi,drawable-mdpi, drawable-xhdpi, and drawable-xxhdpi. but now they are all gone!
is there any explanation of what happens?
and where we should put our images?
This is perhaps because they will add an Gradle plugin that converts SVGs to PNGs during build (as mentioned in this IO talk). The idea is that you will only need to have a single SVG instead of multiple PNGs for various densities (an thus, only one drawable folder). You can still create the folders and use PNGs.
The Gradle plugins for SVG conversion by Google has not been released yet, but you can use Victor or a similar plugin if you already want to use SVGs for your drawables.
You should read Android Blog
you can just create drawable-xhdpi.
I just give answer here
read and if any problem ask.
I wasn't aware that Android Studio ever provided these dpi dependent drawable folders for the built-in default project scaffolding, and indeed, why should they?
Are they supposed to guess that you're going to support each and every one of these resolutions? Perhaps all your graphics will be vector graphics? Perhaps you only target low or high resolutions?
Also, the DPI modifier is only 1 of the possible modifiers you can attach to a resource folder. You can also add locale, screen width / height, mobile country code and many more. Should Android Studio create a folder with each of these options, along with every possible variation? You'd end up with thousands of folders which you'd likely never use.
In addition, creating a folder with no assets inside it is a big problem when you start synchronising your code using Github or something similar, and creating every possible folder with default assets inside seems like a huge waste.
I think the best approach here is to create any resource folder you need when you need it. Google leaves this decision to you.
Also, important: There is no XDPI or XXDPI folder - it's XHDPI, and XXHDPI
Check in your project section, Not in android section, If they gone just simply create them

Does adding drawables add space? Android

In android project there are multiple folders, I know you can simply override these with one 'Drawable' folder.
My question is: When people download my app, will it take up more room if I have manually catered to all the different Drawable folders instead of just overriding them with one?
yea, but your app will be slightly slower, cause android has to re-size the images (whereas if you have different folders it uses the respective images)
Yes, different Drawable is for different dpi based device screen and its part of APK.
When you download APK then even drawable is also part of it and it gets stored on device and it does take space.
Different Drawable folders in android directory is for supporting different screen sizes. for better UI experience you should put drawables in appropriate folders.I think you should have look into it before proceeding further Know android project directories

Images in android app

I see three folders within my eclipse project drawable-hdpi,mdpi,ldpi
Do I need to put images in all three of these folders?Or can I just use one of them.My images
seem to scale fairly well.I do not want to have duplicate images if it is uneccessary.
I guess what I am asking is will the app be able to find my images if I just use one of the above mentioned folders?
Technically if you drop them in mdpi, I believe all devices 1.6 and above will find them. However, if you support below 1.6 devices you'll need to duplicate the drawable-mdpi resources and call it just drawable.
Yes it will find the Drawables regardless of which directory you use. You can also just have a drawable directory if you don't plan to support different densities.

Categories

Resources