When developing an Android application using Cordova 8.0.0 with Vue and Vuetify, I noticed that the beautiful material design icons do not show as expected.
There were two problems.
Problem 1: ligature transformations in Android’s WebView
Ligature transformations did not work in Android’s WebView, so instead of icons one sees text strings.
To fix it, I had to substitute '' for 'keyboard_arrow_up' and similar substitutions for other icons. This list of icon names and the corresponding codepoints can help.
Problem 2: missing glyph indicators
After getting rid of the text strings, instead of beautiful icons I got missing glyph indicators.
Turns out that the css file generated by the build process (npm run build followed by cordova build android) expects the font files containing the icon glyphs to be found in android_asset/www/dist/static/css/static/fonts, but they were actually located in android_asset/www/dist/static/fonts.
The fix is to use a Cordova hook script to transform the relevant links in the css file.
There are two possible locations for the hook script.
- Drop it into the
./hooks/before_build/ subdirectory.
- Specify its location in
./config.xml.
I am not very experienced with the platform, so I chose the first location.
Due to a similar reason (inexperience with node scripts), I wrote it quickly as a /bin/bash shell script.
Here it is in its full glory:
#/bin/bash
echo ============================================
echo Fix paths to font files in Android css files.
echo ============================================
CSSFILES=$1/www/dist/static/css/*.css
echo The relevant css files are: ${CSSFILES}
mkdir -p /tmp/fixcssfiles
rm -v /tmp/fixcssfiles/*
for cssfname in ${CSSFILES} ; do
#cp ${cssfname} /tmp/fixcssfiles/`basename ${cssfname}`
# # (Save a backup css file)
sed 's=url(static/fonts/=url(../fonts/=g' < ${cssfname} \
> /tmp/fixcssfiles/tmpcssfname
mv /tmp/fixcssfiles/tmpcssfname ${cssfname}
echo Procssed ${cssfname}
done
echo ============================================
After adding the script, I got to see the material design icons when running the Android application.
Like this:
Like Loading...