【问题标题】:Reset Android Button to Default Color And Style将 Android 按钮重置为默认颜色和样式
【发布时间】:2017-04-10 12:35:42
【问题描述】:

在我的应用程序中,我需要能够更改按钮的背景颜色并恢复为默认颜色。将颜色更改为自定义颜色是可行的,但我用于反转该过程的代码给我带来了问题。

我的按钮代码:

@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;
    }

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

布局膨胀:

第一次点击时:

OnClick 第二次:

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

【问题讨论】:

    标签: android


    【解决方案1】:

    当你第二次设置背景时,通过从另一个具有默认背景的按钮获取背景来设置它,例如,假设红色按钮为 b1,默认按钮为 b2

    那么设置b1的背景为默认的代码是

    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
            b1.setBackground(b2.getBackground());
    else b1.setBackgroundDrawable(b2.getBackground());
    

    【讨论】:

      【解决方案2】:

      这需要一些时间,因为许多答案都包含已弃用的代码,但我有一个解决我的问题的方法。使用 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;
          }
      

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 2012-10-24
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        相关资源
        最近更新 更多