The library offers icons in the form of Android VectorDrawable
, the icon names are structured as:
R.drawable.ic_fluent_[name]_[size]_[style]
name
- Name of the icon from assets that is all lowercased and underscore separated.size
- Size of the icon that is one of 16/20/24/28/48. Note that some icons do not have all sizes available yet. Our designers are working to add missing ones to complete the collection.style
- Style of the icon that is one ofregular
,filled
orselector
. See the section below for details.
The library offers icons in two styles, regular
and filled
regular | filled |
---|---|
Per the Fluent mobile design language, icons are by default in regular
style and switched to filled
style when active. An example is the icons in the bottom tab bar:
For convenience, the library offers drawable selectors of each icon to help achieve the above effect. The three active states supported are state_activated
, state_checked
and state_selected
.
ic_fluent_mail_24_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_fluent_mail_24_filled" android:state_activated="true"/>
<item android:drawable="@drawable/ic_fluent_mail_24_filled" android:state_checked="true"/>
<item android:drawable="@drawable/ic_fluent_mail_24_filled" android:state_selected="true"/>
<item android:drawable="@drawable/ic_fluent_mail_24_regular"/>
</selector>
The library assigns #212121
as the default icon color. You can however, override it by adding a fluent_default_icon_tint.xml
color selector to the res/color
folder of your project and replacing the color value with a desired one. For example:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#8E8E8E"/>
</selector>
When the device locale is set to a RTL language(e.g. Hebrew or Arabic), some direction-based icons, such as a left arrow, needs to be flipped. The library automatically inserts android:autoMirrored="true"
to these icons, which allows the system to handle RTL layout mirroring for you. The list of icons that supports mirroring can be found in the rtl.txt file.
With Android 5.0 (API level 21) and above, you can tint drawables with color resources or theme attributes that resolve to color resources. See the following sections to know how to apply a tint to different UI components that can host icons.
Use the tint
attribute to apply color tint to an ImageView's drawable. Since the Android framework support for tint
starts from API21+, the custom attribute namespace could be used for backwards compatibility.
<ImageView
...
android:src="@drawable/ic_fluent_checkmark_24_regular"
app:tint="@android:color/white"
android:tint="@android:color/white"/> // OK to use just the framework one too since most MSFT apps are API21+
By code, use ImageViewCompat
from the AndroidX core library:
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(Color.WHITE));
// OK to use just the framework one too since most MSFT apps are API21+
imageView.setImageTintList(ColorStateList.valueOf(Color.WHITE));
Use the drawableTint
attribute to apply color tint to a TextView's compound drawable icon. Since the Android framework support for drawableTint
starts from API24+, the custom attribute namespace could be used for backwards compatibility.
<TextView
...
android:text="Done"
android:drawableStart="@drawable/ic_fluent_checkmark_24_regular"
app:drawableTint="@android:color/white"/>
By code, use TextViewCompat
from the AndroidX core library:
TextViewCompat.setCompoundDrawableTintList(textView, ColorStateList.valueOf(Color.WHITE));
Use the iconTint
attribute to apply color tint to a MenuItem's icon. Since the Android framework support for iconTint
starts from API26+, the custom attribute namespace could be used for backwards compatibility.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_done"
android:icon="@drawable/ic_fluent_checkmark_24_regular"
android:title="Done"
app:iconTint="@android:color/white"
app:showAsAction="always"/>
</menu>
By code, use MenutItemCompat
from the AndroidX core library:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
MenuItem doneItem = menu.findItem(R.id.menu_done);
MenuItemCompat.setIconTintList(doneItem, ColorStateList.valueOf(Color.WHITE));
...
}
Drawables can be tinted by using DrawableCompat
from the AndroidX core library:
Drawable icon = ContextCompat.getDrawable(this, R.drawable.ic_fluent_checkmark_24_regular);
// Tint drawable with a single color
DrawableCompat.setTint(icon, Color.WHITE);
// Tint drawable with a color state list
DrawableCompat.setTintList(icon, ContextCompat.getColorStateList(this, R.color.white_selector));
To maintain a lean app size by excluding any unused icons in build time, set the shrinkResources
to true
in your build.gradle
file, as follows:
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles ...
}
}
If you prefer to only exclude the Fluent icons, please save the keep.xml file at your project's res/raw
directory. Please see this Android developer guide for details about shrinking resources.