【问题标题】:Change FloatingActionButton background color during Runtime在运行时更改 FloatingActionButton 背景颜色
【发布时间】:2019-03-07 22:31:13
【问题描述】:

在运行时单击时,我需要更改FloatingActionButton 的背景颜色。 我的代码:

public static void setButtonTint(FloatingActionButton button, ColorStateList tint) {
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
            ((TintableBackgroundView) button).setSupportBackgroundTintList(tint);
        } else {
            ViewCompat.setBackgroundTintList(button, tint);
        }
}

public void switchFABmode(){
        switch (floatingActionButtonMode){
            case 0:
                setButtonTint(shareFAB,getResources().getColorStateList(R.color.colorGrey));
                setButtonTint(deleteFAB,getResources().getColorStateList(R.color.colorPrimary));
                floatingActionButtonMode = 1;
                Toast.makeText(this, "Tap time to delete",Toast.LENGTH_SHORT).show();
                break;
            case 1:
                shareFAB.setBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary));
                deleteFAB.setBackgroundColor(ContextCompat.getColor(this, R.color.colorGrey));
                Toast.makeText(this,"Tap time to share", Toast.LENGTH_SHORT).show();
                floatingActionButtonMode = 0;
                break;
        }
}

没有做到这一点。有人可以指出我的错误,或提供解决方案吗?

【问题讨论】:

标签: java android floating-action-button


【解决方案1】:

使用这个:

button.setBackgroundColor(ContextCompat.getColor(this, R.color.colorGrey));

更多来自here

【讨论】:

    【解决方案2】:

    好的,我在我的测试项目中插入你的代码(稍作改动),它工作正常。

    FloatingActionButton fab;
    int floatingActionButtonMode = 0;
    
    public static void setButtonTint(FloatingActionButton button, ColorStateList tint) {
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
            ((TintableBackgroundView) button).setSupportBackgroundTintList(tint);
        } else {
            ViewCompat.setBackgroundTintList(button, tint);
        }
    }
    
    public void switchFABmode(){
        switch (floatingActionButtonMode){
            case 0:
                setButtonTint(fab,getResources().getColorStateList(R.color.colorPrimary));
                floatingActionButtonMode = 1;
                Toast.makeText(getActivity(), "Tap time to delete",Toast.LENGTH_SHORT).show();
                break;
            case 1:
                setButtonTint(fab,getResources().getColorStateList(R.color.colorAccent));
                Toast.makeText(getActivity(),"Tap time to share", Toast.LENGTH_SHORT).show();
                floatingActionButtonMode = 0;
                break;
        }
    }
    

    在片段的onCreateView:

     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.map, container, false);
        fab = v.findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switchFABmode();
            }
        });
    return v;
    }
    

    【讨论】:

    • 谢谢,但它仍然没有改变它的颜色,我想我的错误出在其他地方......虽然它很奇怪,因为 Toast 和其他一切都很好,它只是不管我做什么都保持不变的颜色做:(
    猜你喜欢
    • 2018-01-06
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多