How to add icons to React Native app - icons

I am making a React Native app. I would like to customize the app icon (meaning the icon that you click on to start the app). I have Googled this, but I keep finding different types of icons that refer to different things. How do I add these types of icons to the app?

iOS Icons
Set AppIcon in Images.xcassets.
Add 9 different size icons:
29pt
29pt*2
29pt*3
40pt*2
40pt*3
57pt
57pt*2
60pt*2
60pt*3.
Images.xcassets will look like this:
Android Icons
Put ic_launcher.png in folders [ProjectDirectory]/android/app/src/main/res/mipmap-*/.
72*72 ic_launcher.png in mipmap-hdpi.
48*48 ic_launcher.png in mipmap-mdpi.
96*96 ic_launcher.png in mipmap-xhdpi.
144*144 ic_launcher.png in mipmap-xxhdpi.
192*192 ic_launcher.png in mipmap-xxxhdpi.
Update 2019 Android
The latest versions of react native also supports round icon. For this particular case, you have two choices:
A. Add round icons:
In each mipmap folder, add additionally to the ic_launcher.png file also a round version called ic_launcher_round.png with the same size.
B. Remove round icons:
Inside yourProjectFolder/android/app/src/main/AndroidManifest.xml remove the line android:roundIcon="#mipmap/ic_launcher_round"and save it.
Otherwhise the build throws an error.

I wrote a generator to automatically generate icons for your react native app from a single icon file. It generates your assets and it also adds them correctly to your ios and android project:
Update (04/09/2019)
We revamped our generator to be up to date with the ecosystem standards. You can now use #bam.tech/react-native-make.
You can install it using: yarn add #bam.tech/react-native-make in the react-native project
To use it react-native set-icon --path <path_to_png> --background <icon_background_color> --platform <android|ios>
And... that's it! Hope it can be useful for others :)
Recommendations:
1024x1024 base image
No transparent background for iOS
An icon which follows adaptive icons guidelines for Android
Here are some improvements over the previous tool: 🥳
No Yeoman dependency, it is now a react-native-cli plugin
No Image Magick dependency
Creates Adaptive icons for Android
Adds missing icons sizes for iOS

I would use a service to scale the icon correctly. http://makeappicon.com/ seems good. Use a image on the larger size as scaling up a smaller image can lead to the larger icons being pixelated. That site will give you sizes for both iOS and Android.
From there its just a matter of setting the icon like you would a regular native app.
https://help.apple.com/xcode/mac/8.0/#/dev10510b1f7
Set icon for Android application

I was able to add an app icon to my react-native android project by following this guy's advice and using Android Asset Studio
Here it is, transcribed in case the link goes dead:
How to upload an Application Icon in React-Native Android
1) Upload your image to Android Asset Studio.
Pick whatever effects you’d like to apply. The tool generates a zip file for you. Click Download .Zip.
2) Unzip the file on your machine. Then drag over the images you want to your /android/app/src/main/res/ folder. Make sure to put each image in the right subfolder mipmap-{hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi}.
3) Do not (as I originally did) naively drag and drop the whole folder over your res folder. As you may be removing your /res/values/{strings,styles}.xml files altogether.

Android Studio has a very handy icon asset wizard called Image Asset Studio (user guide here). It's quite self explainatory, and has a few handy effects and it's built right in:
Screenshot from Android Studio 4.1.3 on Windows 10

Someone made a very easy to use tool just for this task: https://www.npmjs.com/package/app-icon
This simple tool allows you to create a single icon in your react-native project, then create icons of all required sizes from it. It currently works for iOS and Android.
I've used it. Made a 512x512 png and then ran that tool and boom, done. Super easy.

You'll need different sized icons for iOS and Android, like Rockvic said. In addition, I recommend this site for generating different sized icons if anybody is interested. You don't need to download anything and it works perfectly.
https://resizeappicon.com/
Hope it helps.

This is helpful for people struggling to find better site to generate icons and splashscreen
Make App Icon (useful for both android and ios)
APE tools (useful for both android and ios)
Icon set creator (useful for ios only)
Andoid Asset Studio(useful for android only + recommended*)

Steps Android App icons:
Go to this website https://appicon.co/
Add image their and generate icons, it should be downloaded
Unzip the folder
Inside their copy all the folders in AppIcons/android/ (i.e. Folder
names: mipmap-xxxhdpi,mipmap-xxhdpi,mipmap-xhdpi,mipmap-hdpi,mipmap-mdpi)
paste above copied folders into {rootFolder}/android/app/src/main/res/
and replace existing ones
Remove this line from AndroidManifest.xml
(android:roundIcon="#mipmap/ic_launcher_round")
Icons are successfully added
Change IOS App icons:
Go to this website https://appicon.co/
Add image their and generate icons, it should be downloaded
Unzip the folder
Inside their copy all the folders in AppIcons/Assets.xcassets/ (i.e.
AppIcon.appiconset folder)
paste the AppIcon.appiconset folder into
{rootFolder}/ios/{projectname}/Images.xcassets/ and replace existing one
Icons are successfully added

If you're using expo just place an 1024 x 1024 png file in your project and
add an icon property to your app.json i.e. "icon": "./src/assets/icon.png"
https://docs.expo.io/versions/latest/guides/app-icons

For setting the App launch icon for Android Devices in a React-Native project:
Take a high resolution image of your logo and place it inside your project directory. Preferably in [Project-DIR]/android/app/src/main/res/
Open Android Studio and run your React-native project.
In Android Studio's Project window, select the Android view
Right-click the res folder and select New > Image Asset
A "Configure Image Asset" window will open; Locate your high resolution image and place set it as your "Foreground layer".
Set your "Background Layer" if applicable
Click "Next" and continue to finish.
Run your application again to see the new app launch icon.
Official documentation can be found here: https://developer.android.com/studio/write/image-asset-studio

Use this library to make your work easier.
It will automate your Icon generation process
https://www.npmjs.com/package/#bam.tech/react-native-make

Update 2022
Since the Almouro's Answer is no longer maintained
Android and iOS icon
You can now generate icons with one command both for iOS and Android with rounded icon:
npx icon-set-creator create ./path/to/icon.png
I highly recommend using an icon with a size of at least 1024x1024 pixels
Adaptive Android icon
npx icon-set-creator create -b <background> -f <foreground> -A
background - The color (E.g. "#ffffff") or image asset (E.g. "assets/images/christmas-background.png")
foreground - The image asset (E.g. "assets/images/christmas-foreground.png")

I personally use this link to generate my desired icons https://appicon.co/
And for importing inside the application.
For IOS Setup
Click on your project from Xcode ==>
then on the left side you will see your click on that ==>
Now you will see subfile name Images.xcassets click on that ==>
you icons size will be displayed on the right hand window ==>
simply drag and drop the icons which we have generated from https://appicon.co/ ==>
and your IOS ICON SETUP IS DONE.
Moving to Android
We will go to Android ==> app ==> src ==> main ==> res
Here you will various folders named mipmap-hdpi till xxxhdpi ==>
Drag the icons from the specific folder to your project specific folder.
Happy coding!

To import icons on React Native if you want the icons without having the pictures, then react-native-vector-icons would be the best one. You can use it if you don't want to download the icons and use it in your project.

I would like to suggest to use react-native-vector-icons to import icons to your project. As you use vector icons, you don't need to worry much on icon scaling side. While using the package you are able to use all popular icon set such as fontawesome, ionicons etc..
Besides these iconsets you can also bring your own icons too to your react-native project by packing your icons as a ttf file and you can import that ttf directly to both android and ios project. You can utilise the same react-native-vector-icons library to manage those icons
Here is a detailed procedure to setup custom icons
https://medium.com/bam-tech/add-custom-icons-to-your-react-native-application-f039c244386c

You can import react-native-elements and use the font-awesome icons to your react native app
Install
npm install --save react-native-elements
then import that where you want to use icons
import { Icon } from 'react-native-elements'
Use it like
render() {
return(
<Icon
reverse
name='ios-american-football'
type='ionicon'
color='#517fa4'
/>
);
}

Related

Use of Ant Design Icons While Offline

I am working on a reactJS application that uses ant design for the UI. Recently we released this application to production where the computers are pretty locked down. This application is an intranet application and these computers have no internet access. So, because of that, the ant design icons on the modals were showing up as empty boxes. I did some digging and saw that the icons are using CSS classes.
For example, this is the CSS class for the red error "X" on the error modal:
.anticon-cross-circle:before
{
content:"\E62E"
}
I'm not too familiar with the CSS content attribute so I went to www.w3schools.com and read up on it a bit and tested this particular content value on their Try It page for this attribute and I got the empty box that I got in my production environment.
Does anyone know what needs to be done to import these icons into my project so that they can be used offline?
Thanks
What I think is happening is that Ant Design is defining the CSS font definition with a URL to the corresponding font-file. Since the computers are offline, it cannot find those definitions.
In the documentation I see that they also provide SVG Icons, which should work completely offline. I think this is worth a try. The steps to implement this can be found here and it should be available from version 3.9.0: https://ant.design/components/icon/#SVG-icons
Have you tried downloading the icon library into your project folder?
https://github.com/ant-design/ant-design-icons/tree/master/packages/icons-react. Looks like they have assigned their own codes to their own icons so you'll need to have them offline.
You will nessd the css file tabler-icons.css and the woff file tabler-icons.woff and assign a font-family named tabler-icons within your style.css using #font-face

Stop VSC from showing all javascript files as React files

I think it's weird that the default file icon theme shows that all Javascript files are React files now. Can that be changed without having to download a new theme?
I'm not even using React in this project.
Hope this solves your issue. In the bottom right side of your VSC tool, click on javascript react and it opens up a dropdown list, In that please select Javascript option. I have attached a screenshot of VSC code tool image for your reference.

Nativescript: add icon and specify name

How would i add a custom icon with a given name to my nativescript project using the tns resources generate icons-command
$tns resources generate icons ~/myfolder/myspecialicon.png
Say i want the command to place the icon(s) in the correct folders maintaining the name myspecialicon.xxx instead of just overwriting the default icon.png?
Cheers
Lasse
That only generates the app icon. To generate other icons (and other image assets, really) I recommend the online tool http://images.nativescript.rocks/.
It generates assets for both Android and iOS. All you have to do is grab the result and merge it into your project's App_Resources. I know it is not ideal but it's the best workflow I found so far.

Edit Microsoft ChatBot UI design

I have setup a QnA Bot via the Azue BotService, and I want to use the WebChat channel, but the default MS Design for the chat interface is quite bland; is there a way for me to edit it?
Is it possible to go form the default theme on the left, so something like Air New Zealand's bot on the right in the image below?
It depends on how you want to integrate the webchat in your page but yes it is possible to change the aspect, it's only css and js
All the details are provided on the GitHub account for the Webchat: https://github.com/Microsoft/BotFramework-WebChat
In a few words:
Want to run a custom build of WebChat? Clone this repo, alter it, build it, and reference your built botchat.css and botchat.js files.
And for Styling:
Styling
In the /src/scss/ folder you will find the source files for generating
/botchat.css. Run npm run build-css to compile once you've made your
changes. For basic branding, change colors.scss to match your color
scheme. For advanced styling, change botchat.scss.

White Labeling a TideSDK App

I'm in the process of building out my first TideSDK app by transitioning an existing AIR app and the client would like to white label the app. For the AIR app, we could point the application.xml file to the location of brand-specific HTML, but I don't see an obvious way to do that with tiapp.xml. Is it there and I'm just missing it?
In this case, white labeling mostly means a logo change and perhaps a few colors, so it's hardly anything intensive. What's the best way to do something like this using TideSDK?
TideSDK is no different than any web app for branding. CSS is used to style your HTML. Any default CSS you have in your base app may be overridden for branding of course.
Beyond the HTML, the native UI is controlled by the OS, and you have only the icon to be concerned with and replacing the default artwork (with your own branding) in the native installer we provide.
If you need to change the icon name, which is not a necessity, do this in the tiapp.xml and manifest. Just replace the image with one of your own. The same applies to the installer art.
U can modify the logo with the attribute image in manifest file:
#image:default_app_logo.png
change to
#image:my_logo.png

Resources