I changed the background color of the Floating Action Button backgroundTintList using the following code:
fab.setBackgroundTintList(ColorStateList.valueOf(mResources.getColor(R.color.fab_color)));
But in the end, I get the following on API 4.4.2:

Everything looks great on API 21 <=, but everything below API 21, I have this problem for FAB.
I programmatically create a FAB like this:
FloatingActionButton fab = new FloatingActionButton(this); CoordinatorLayout.LayoutParams layoutParams = new CoordinatorLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); fab.setLayoutParams(layoutParams); layoutParams.rightMargin = mResources.getDimensionPixelSize(R.dimen.activity_horizontal_margin); ((CoordinatorLayout) findViewById(R.id.coordinatorLayout)).addView(fab); CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); p.setAnchorId(R.id.appBarLayout); p.anchorGravity = Gravity.BOTTOM | Gravity.END; fab.setLayoutParams(p); fab.setVisibility(View.VISIBLE); fab.setBackgroundTintList(ColorStateList.valueOf(mResources.getColor(R.color.fab_color))); fab.setImageDrawable(getResources().getDrawable(R.drawable.ic_button));
I also happened to run the official source code for the FloatingActionButton , and I saw that they were creating an instance of borderDrawable here:
@Override void setBackgroundDrawable(Drawable originalBackground, ColorStateList backgroundTint, PorterDuff.Mode backgroundTintMode, int rippleColor, int borderWidth) { // Now we need to tint the original background with the tint mShapeDrawable = DrawableCompat.wrap(originalBackground.mutate()); DrawableCompat.setTintList(mShapeDrawable, backgroundTint); if (backgroundTintMode != null) { DrawableCompat.setTintMode(mShapeDrawable, backgroundTintMode); } final Drawable rippleContent; if (borderWidth > 0) { // BORDER DRAWABLE RIGHT HERE!! mBorderDrawable = createBorderDrawable(borderWidth, backgroundTint); rippleContent = new LayerDrawable(new Drawable[]{mBorderDrawable, mShapeDrawable}); } else { mBorderDrawable = null; rippleContent = mShapeDrawable; } mRippleDrawable = new RippleDrawable(ColorStateList.valueOf(rippleColor), rippleContent, null); mShadowViewDelegate.setBackgroundDrawable(mRippleDrawable); mShadowViewDelegate.setShadowPadding(0, 0, 0, 0); }
android floating-action-button androiddesignsupport
Andyoid
source share