在我的应用程序中,我需要能够更改按钮的背景颜色并返回默认颜色。将颜色更改为自定义颜色有效,但我的反转过程的代码给了我一些问题。
我的按钮代码:
@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;
}
当我重置按钮资源时,我最终得到一个带边框的按钮,我之前没有边框:
布局膨胀:
第一次点击:
第二次点击:
我想避免创建一个模仿平面按钮的自定义drawable。有没有办法获得默认的无边框按钮资源?
答案 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;
}