将Android按钮重置为默认颜色和样式

时间:2017-04-10 12:35:43

标签: android

在我的应用程序中,我需要能够更改按钮的背景颜色并返回默认颜色。将颜色更改为自定义颜色有效,但我的反转过程的代码给了我一些问题。

我的按钮代码:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.custom_practice, container, false);
        mNomButton = (Button) view.findViewById(R.id.custom_practice_nom_button);
        mNomButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mNomIsSelected = !mNomIsSelected;
                mNomButton.setBackgroundResource(mNomIsSelected ? R.color.buttonSelected : android.R.drawable.btn_default);
                updateView(mNomButton);
            }
        });
        return view;
    }

当我重置按钮资源时,我最终得到一个带边框的按钮,我之前没有边框:

布局膨胀:

enter image description here

第一次点击:

enter image description here

第二次点击:

enter image description here

我想避免创建一个模仿平面按钮的自定义drawable。有没有办法获得默认的无边框按钮资源?

2 个答案:

答案 0 :(得分:0)

当你在第二次设置背景时,通过从另一个具有默认背景的按钮获取背景来设置它,所以对于ex let' s说红色的按钮是b1而默认的按钮是b2

然后将b1设置为默认背景的代码为

IF $sourceOutlookEmail IsNullOrWhitespace
THEN $WriteEmail=$sourceEmail
ELSE $WriteEmail=$sourceOutlookEmail

答案 1 :(得分:0)

花了一些时间,因为许多答案包括弃用的代码,但我有一个问题的解决方案。使用Mohamed的建议我抓住其中一个按钮的默认Drawable值并存储它。最大的问题是找到一种方法,将colors.xml中的默认颜色和颜色设置为与我的三元组相同的类型。

private Drawable mDefaultButtonColor;
private Drawable mSelectedButtonColor;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        mNomButton = (Button) view.findViewById(R.id.custom_practice_nom_button);

        mNomButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mNomIsSelected = toggleButton(mNomButton, mNomIsSelected);
            }
        }

        mDefaultButtonColor = ((Drawable) mNomButton.getBackground());
        mSelectedButtonColor = ContextCompat.getDrawable(getActivity(), R.color.buttonSelected);
        return view;
    }


    private boolean toggleButton(Button button, boolean isSelected) {
        isSelected = !isSelected;
        button.setBackground(isSelected ? mSelectedButtonColor : mDefaultButtonColor);
        return isSelected;
    }