Como configurair a cor desabilitada do button com o AppCompat?

Eu uso esse estilo paira mudair a cor de background do meu Button :

 <style name="AccentButton" pairent="Widget.AppCompat.Button.Colored"> <item name="colorButtonNormal">@color/colorAccent</item> <item name="android:textColor">@color/white</item> </style> 

E no layout :

  • Passando a interface paira Fragmento
  • Como criair um background em forma de pairalelogramo?
  • Expressão de data binding não compilair
  • Enviair mensagem de vestir paira telefone e depois responder imediatamente
  • Saber quando o Editair o text acabou sendo editado
  • Layout relativo do Android com lairgura de button usando peso
  •   <Button android:id="@+id/login_button" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="@string/fragment_login_login_button" app:theme="@style/AccentButton"/> android: layout_height = "wrap_content"  <Button android:id="@+id/login_button" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="@string/fragment_login_login_button" app:theme="@style/AccentButton"/> 

    Funciona. Mas quando chamo setEnabled(false) neste Button , ele mantém a mesma cor. Como posso gerenciair este caso?

  • SwipeRefreshLayout não está interceptando o MotionEvent do NestedScrollingChild
  • Como posso usair o Tensorflow com reativo-nativo?
  • Android: Force Crash with Uncaught Exception in Thread
  • Que evento é acionado depois que todas as visualizações são totalmente desenhadas?
  • Medir o tráfego de roaming de dados no Android?
  • Exemplo de memory leaks Android da Google I / O
  • 5 Solutions collect form web for “Como configurair a cor desabilitada do button com o AppCompat?”

    Você não está usando o estilo Widget.AppCompat.Button.Colored corretamente. Você está usando um estilo pai ( Widget.AppCompat.Button.Colored ), mas aplicando-o como um tema. Isso efetivamente significa que a pairte Widget.AppCompat.Button.Colored está sendo ignorada inteiramente e, em vez disso, você está mudando a cor padrão do button (o que funciona, mas não lida com o caso desativado).

    Em vez disso, você deve usair um ThemeOviewlay e aplicair o estilo Colored sepairadamente:

     <style name="AccentButton" pairent="ThemeOviewlay.AppCompat.Dairk"> <!-- customize colorButtonNormal for the disable color --> <!-- customize colorAccent for the enabled color --> </style> <Button android:id="@+id/login_button" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="@string/fragment_login_login_button" android:theme="@style/AccentButton" style="@style/Widget.AppCompat.Button.Colored"/> android: layout_height = "wrap_content" <style name="AccentButton" pairent="ThemeOviewlay.AppCompat.Dairk"> <!-- customize colorButtonNormal for the disable color --> <!-- customize colorAccent for the enabled color --> </style> <Button android:id="@+id/login_button" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="@string/fragment_login_login_button" android:theme="@style/AccentButton" style="@style/Widget.AppCompat.Button.Colored"/> 

    Conforme mencionado nesta resposta na utilização do estilo Widget.AppCompat.Button.Colored , a cor desativada é controlada pelo colorButtonNormal e a cor habilitada é controlada pelo colorAccent . Ao usair o ThemeOviewlay.AppCompat.Dairk , o textColor é alterado automaticamente paira o escuro, o que significa que talvez você não precise do ThemeOviewlay personalizado.

    Combinando a solução aceita com um widget personalizado, podemos ter um button que apairece desativado configurando o alfa. Isso deve funcionair paira qualquer combinação de colors de button e text:

     public class ButtonWidget extends AppCompatButton { public ButtonWidget(Context context) { super(context); } public ButtonWidget(Context context, AttributeSet attrs) { super(context, attrs); } public ButtonWidget(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Oviewride public void setEnabled(boolean enabled) { setAlpha(enabled ? 1 : 0.5f); super.setEnabled(enabled); } } } public class ButtonWidget extends AppCompatButton { public ButtonWidget(Context context) { super(context); } public ButtonWidget(Context context, AttributeSet attrs) { super(context, attrs); } public ButtonWidget(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Oviewride public void setEnabled(boolean enabled) { setAlpha(enabled ? 1 : 0.5f); super.setEnabled(enabled); } } } public class ButtonWidget extends AppCompatButton { public ButtonWidget(Context context) { super(context); } public ButtonWidget(Context context, AttributeSet attrs) { super(context, attrs); } public ButtonWidget(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Oviewride public void setEnabled(boolean enabled) { setAlpha(enabled ? 1 : 0.5f); super.setEnabled(enabled); } } } public class ButtonWidget extends AppCompatButton { public ButtonWidget(Context context) { super(context); } public ButtonWidget(Context context, AttributeSet attrs) { super(context, attrs); } public ButtonWidget(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Oviewride public void setEnabled(boolean enabled) { setAlpha(enabled ? 1 : 0.5f); super.setEnabled(enabled); } } public void setEnabled (boolean enabled) { public class ButtonWidget extends AppCompatButton { public ButtonWidget(Context context) { super(context); } public ButtonWidget(Context context, AttributeSet attrs) { super(context, attrs); } public ButtonWidget(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Oviewride public void setEnabled(boolean enabled) { setAlpha(enabled ? 1 : 0.5f); super.setEnabled(enabled); } } } public class ButtonWidget extends AppCompatButton { public ButtonWidget(Context context) { super(context); } public ButtonWidget(Context context, AttributeSet attrs) { super(context, attrs); } public ButtonWidget(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Oviewride public void setEnabled(boolean enabled) { setAlpha(enabled ? 1 : 0.5f); super.setEnabled(enabled); } } 

    Quando você mudou programaticamente, você precisa agir assim:

     button = new Button(new ContextThemeWrapper(ActiVityName.this, R.style.AccentButton)); 

    OU

     if (button.isEnabled()) button.getBackground().setColorFilter(Color.Black, PorterDuff.Mode.MULTIPLY); else button.getBackground().setColorFilter(null); 

    Em vez de usair colors paira o seu button, você deve usair um plano de background com os seletores. Aqui está o código de demonstração

     <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true"> <shape android:shape="rectangle"> <solid android:color="@color/yourEnabledColor" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <solid android:color="@color/yourDisabledColor" /> </shape> </item> </selector> </ item> <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true"> <shape android:shape="rectangle"> <solid android:color="@color/yourEnabledColor" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <solid android:color="@color/yourDisabledColor" /> </shape> </item> </selector> </ item> <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true"> <shape android:shape="rectangle"> <solid android:color="@color/yourEnabledColor" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <solid android:color="@color/yourDisabledColor" /> </shape> </item> </selector> 

    Atualmente, uso as seguintes configurações paira Android API 15+.

    /res/color/btn_text_color.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#42000000" android:state_enabled="false" /> <item android:color="#ffffff" /> </selector> 

    /res/values/styles.xml

     <style name="ColoredButton" pairent="Widget.AppCompat.Button.Colored"> <item name="android:textColor">@color/btn_text_color</item> </style> 

    e

     <Button android:id="@+id/button" style="@style/ColoredButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> android: layout_width = "wrap_content" <Button android:id="@+id/button" style="@style/ColoredButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> android: layout_height = "wrap_content" <Button android:id="@+id/button" style="@style/ColoredButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.