在支持设计23.2.0中,无法使用background和backgroundTint更改FloatingActionButton的背景颜色

时间:2016-03-07 11:23:16

标签: android material-design floating-action-button

这是我的代码:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/enter_floating_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="40dip"
        android:layout_marginRight="10dip"
        android:clickable="true"
        app:background="#00FF00"
        app:backgroundTint="#00FF00"
        app:rippleColor="@android:color/red"
        app:fabSize="normal"
        android:src="@drawable/ic_done" />

正如您所看到的,我设置了app:backgroundapp:backgroundTint,但这些都没用,FloatingActionButton's背景颜色没有变化,app:rippleColor,当我按下按钮它的颜色不是我设置的,看起来像主题中的accentColor。

为什么这些属性不起作用?

如何更改FloatingActionButton's背景和波纹颜色?

我见过这个:Android changing Floating Action Button color。一些答案可能在22中有效,但我在23中找不到有用的方法。

2 个答案:

答案 0 :(得分:1)

浮动操作按钮将从styles.xml中的colorAccent属性获取颜色。设置样式中的颜色并为此浮动操作按钮设置该样式然后它将起作用

答案 1 :(得分:0)

尝试在FloatingActionButton类中以编程方式添加波纹颜色:

        public RippleView(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
                mContext = context;
                init();
                TypedArray a = context.obtainStyledAttributes(attrs,
                        R.styleable.RippleView);
                mRippleColor = a.getColor(R.styleable.RippleView_rippleColor,
                        mRippleColor);
                mAlphaFactor = a.getFloat(R.styleable.RippleView_alphaFactor,
                        mAlphaFactor);
                mHover = a.getBoolean(R.styleable.RippleView_hover, mHover);
                a.recycle();
            }


    public void init() {
            mDensity = getContext().getResources().getDisplayMetrics().density;

            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mPaint.setAlpha(20);
          setRippleColor(Color.BLACK, 0.2f);
          // setRippleColor(Color.parseColor(getResources().getColor(R.color.greycolor), 0.2f);
           // setRippleColor(0x000000, 0.1f);
        }

        public void setRippleColor(int rippleColor, float alphaFactor) {
            mRippleColor = rippleColor;
            mAlphaFactor = alphaFactor;
        }

 public void setHover(boolean enabled) {
        mHover = enabled;
    }