How to grey out a button?

后端 未结 9 729
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-22 22:23

I have a button defined as shown below. When I want to disable it I use my_btn.setEnabled(false), but I would also like to grey it out. How can I do that?

相关标签:
9条回答
  • 2020-12-22 22:41

    You could Also make it appear as disabled by setting the alpha (making it semi-transparent). This is especially useful if your button background is an image, and you don't want to create states for it.

    button.setAlpha(.5f);
    button.setClickable(false);
    

    update: I wrote the above solution pre Kotlin and when I was a rookie. It's more of a "quick'n'dirty" solution, but I don't recommend it in a professional environment.

    Today, if I wanted a generic solution that works on any button/view without having to create a state list, I would create a Kotlin extension.

    fun View.disable() {
        getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
        setClickable(false)
    }
    

    In Java you can do something is similar with a static util function and you would just have to pass in the view as variable. It's not as clean but it works.

    0 讨论(0)
  • 2020-12-22 22:42
    Button button = (Button)findViewById(R.id.buy_btn);
    button.setEnabled(false);
    
    0 讨论(0)
  • 2020-12-22 22:47

    All given answers work fine, but I remember learning that using setAlpha can be a bad idea performance wise (more info here). So creating a StateListDrawable is a better idea to manage disabled state of buttons. Here's how:

    Create a XML btn_blue.xml in res/drawable folder:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Disable background -->
        <item android:state_enabled="false"
              android:color="@color/md_blue_200"/>
        
        <!-- Enabled background -->
        <item android:color="@color/md_blue_500"/>
    </selector>
    

    Create a button style in res/values/styles.xml

    <style name="BlueButton" parent="ThemeOverlay.AppCompat">
          <item name="colorButtonNormal">@drawable/btn_blue</item>
          <item name="android:textColor">@color/md_white_1000</item>
    </style>
    

    Then apply this style to your button:

    <Button
         android:id="@+id/my_disabled_button"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:theme="@style/BlueButton"/>
    

    Now when you call btnBlue.setEnabled(true) OR btnBlue.setEnabled(false) the state colors will automatically switch.

    0 讨论(0)
  • 2020-12-22 22:49

    I used this code for that:

    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0);
    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
    profilePicture.setColorFilter(filter);
    
    0 讨论(0)
  • 2020-12-22 22:51

    The most easy solution is to set color filter to the background image of a button as I saw here

    You can do as follow:

    if ('need to set button disable')
        button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
    else
        button.getBackground().setColorFilter(null);
    

    Hope I helped someone...

    0 讨论(0)
  • 2020-12-22 22:53

    You should create a XML file for the disabled button (drawable/btn_disable.xml)

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="@color/grey" />
        <corners android:radius="6dp" />
    </shape>
    

    And create a selector for the button (drawable/btn_selector.xml)

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@drawable/btn_disable" android:state_enabled="false"/>
        <item android:drawable="@drawable/btn_default" android:state_enabled="true"/>
        <item android:drawable="@drawable/btn_default" android:state_pressed="false" />
    
    </selector>
    

    Add the selector to your button

    <style name="srp_button" parent="@android:style/Widget.Button">
        <item name="android:background">@drawable/btn_selector</item>
    </style>
    
    0 讨论(0)
提交回复
热议问题