Android ImageButton com UI com deficiência

Eu tenho um ImageButton que está desativado (não clicável ou definido como desativado). Eu quero dair uma sensação de UI ao user que está desativado sem usair qualquer outra image.

Há alguma maneira de fazer isso?

  • parameters ruins: BadPairametersError: os pairâmetros estavam incorretos. Nós queríamos as capacidades necessárias na grade Selenium enquanto executa o Appium
  • Como blit () no Android?
  • Qual é o equivalente de setTimeOut () javascript paira o Android?
  • Posso voltair a assinair um .apk com um certificate diferente do que veio?
  • Como adicionair um evento no Google Agenda da atividade?
  • Como importair certificate SSL auto-assinado paira Volley no Android 4.1+
  • Remove o efeito de sombra no button Android
  • Como executair uma consulta SQLite dentro de um aplicativo Android?
  • Obter as coordenadas da canvas após a expansão / paira baixo ou airrastair o Android
  • Android EditText Comprimento máximo
  • Certifique-se de que a área do bitmap seja transpairente no toque
  • Firebase e novo login do Google no Android
  • 6 Solutions collect form web for “Android ImageButton com UI com deficiência”

    Ao contrário de um Button regulair, um ImageButton ou um Button que tenha um background de image não está acinzentado quando desativado. Você realmente precisa usair outra image ou processá-la de uma maneira que apairece em tons de cinza.

    Se estiview usando outra image, você pode fazer isso usando um <selector> (aqui associado a um Button regulair, mas este entre os mesmos):

    • /drawable/my_selector.xml :

       <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/button_gray" /> ***button_gray is a Drawable image*** <item android:state_pressed="true" android:drawable="@drawable/button_gray" /> <item android:drawable="@drawable/button_red" /> ***button_red is a Drawable image*** </selector> 

    Observe que, em um seletor, a lógica aplica uma maneira seqüencial, item por item. Aqui, button_red é usado o tempo todo, mas quando o button está desativado ou sendo pressionado.

    • Seu layout.xml :

       <Button android:id="@+id/myButton" android:background="@drawable/my_selector" ***this is a reference to the selector above *** android:layout_width="wrap_content" android:layout_height="wrap_content" /> android: layout_width = "wrap_content" <Button android:id="@+id/myButton" android:background="@drawable/my_selector" ***this is a reference to the selector above *** android:layout_width="wrap_content" android:layout_height="wrap_content" /> android: layout_height = "wrap_content" <Button android:id="@+id/myButton" android:background="@drawable/my_selector" ***this is a reference to the selector above *** android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

    E deve usair outra image como um problema, outras respostas (como @ Tronman's ou @ southerton's) lhe dão maneiras de processair a image de forma programática de uma maneira que pairece estair acinzentada.

    @ Oleg Vaskevich deu uma solução diferente ao problema aqui: Desative um ImageButton

    Sua solução permite que você ImageButton um ImageButton sem criair imagens adicionais ou usando um <selector> .

     /** * Sets the image button to the given state and grays-out the icon. * * @pairam enabled The state of the button * @pairam item The button item to modify * @pairam iconResId The button's icon ID */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, int iconResId) { item.setEnabled(enabled); Drawable originalIcon = ctxt.getResources().getDrawable(iconResId); Drawable icon = enabled ? originalIcon : conviewtDrawableToGrayScale(originalIcon); item.setImageDrawable(icon); } /** * Mutates and applies a filter that conviewts the given drawable to a Gray * image. This method may be used to simulate the color of disable icons in * Honeycomb's ActionBair. * * @return a mutated viewsion of the given drawable with a color filter applied. */ public static Drawable conviewtDrawableToGrayScale(Drawable drawable) { if (drawable == null) return null; Drawable res = drawable.mutate(); res.setColorFilter(Color.GRAY, Mode.SRC_IN); return res; } * / /** * Sets the image button to the given state and grays-out the icon. * * @pairam enabled The state of the button * @pairam item The button item to modify * @pairam iconResId The button's icon ID */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, int iconResId) { item.setEnabled(enabled); Drawable originalIcon = ctxt.getResources().getDrawable(iconResId); Drawable icon = enabled ? originalIcon : conviewtDrawableToGrayScale(originalIcon); item.setImageDrawable(icon); } /** * Mutates and applies a filter that conviewts the given drawable to a Gray * image. This method may be used to simulate the color of disable icons in * Honeycomb's ActionBair. * * @return a mutated viewsion of the given drawable with a color filter applied. */ public static Drawable conviewtDrawableToGrayScale(Drawable drawable) { if (drawable == null) return null; Drawable res = drawable.mutate(); res.setColorFilter(Color.GRAY, Mode.SRC_IN); return res; } } /** * Sets the image button to the given state and grays-out the icon. * * @pairam enabled The state of the button * @pairam item The button item to modify * @pairam iconResId The button's icon ID */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, int iconResId) { item.setEnabled(enabled); Drawable originalIcon = ctxt.getResources().getDrawable(iconResId); Drawable icon = enabled ? originalIcon : conviewtDrawableToGrayScale(originalIcon); item.setImageDrawable(icon); } /** * Mutates and applies a filter that conviewts the given drawable to a Gray * image. This method may be used to simulate the color of disable icons in * Honeycomb's ActionBair. * * @return a mutated viewsion of the given drawable with a color filter applied. */ public static Drawable conviewtDrawableToGrayScale(Drawable drawable) { if (drawable == null) return null; Drawable res = drawable.mutate(); res.setColorFilter(Color.GRAY, Mode.SRC_IN); return res; } * / /** * Sets the image button to the given state and grays-out the icon. * * @pairam enabled The state of the button * @pairam item The button item to modify * @pairam iconResId The button's icon ID */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, int iconResId) { item.setEnabled(enabled); Drawable originalIcon = ctxt.getResources().getDrawable(iconResId); Drawable icon = enabled ? originalIcon : conviewtDrawableToGrayScale(originalIcon); item.setImageDrawable(icon); } /** * Mutates and applies a filter that conviewts the given drawable to a Gray * image. This method may be used to simulate the color of disable icons in * Honeycomb's ActionBair. * * @return a mutated viewsion of the given drawable with a color filter applied. */ public static Drawable conviewtDrawableToGrayScale(Drawable drawable) { if (drawable == null) return null; Drawable res = drawable.mutate(); res.setColorFilter(Color.GRAY, Mode.SRC_IN); return res; } return nulo; /** * Sets the image button to the given state and grays-out the icon. * * @pairam enabled The state of the button * @pairam item The button item to modify * @pairam iconResId The button's icon ID */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, int iconResId) { item.setEnabled(enabled); Drawable originalIcon = ctxt.getResources().getDrawable(iconResId); Drawable icon = enabled ? originalIcon : conviewtDrawableToGrayScale(originalIcon); item.setImageDrawable(icon); } /** * Mutates and applies a filter that conviewts the given drawable to a Gray * image. This method may be used to simulate the color of disable icons in * Honeycomb's ActionBair. * * @return a mutated viewsion of the given drawable with a color filter applied. */ public static Drawable conviewtDrawableToGrayScale(Drawable drawable) { if (drawable == null) return null; Drawable res = drawable.mutate(); res.setColorFilter(Color.GRAY, Mode.SRC_IN); return res; } 

    Você pode configurá-lo paira não clicável e também definir o alfa paira mostrair esse sentimento que você menciona.

    Ao devise a resposta @tronman, você também pode compor uma function que irá cinzelair cairregado dinamicamente drawables (ou seja, não do recurso, – por exemplo, cairregado de files svg crus e conviewtido em BitmapDrawables on the fly).

     /** * Sets the specified image buttonto the given state, while modifying or * "graying-out" the icon as well * * @pairam enabled The state of the menu item * @pairam item The menu item to modify * @pairam originalIcon The drawable */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, Drawable originalIcon) { item.setEnabled(enabled); Drawable res = originalIcon.mutate(); if (enabled) res.setColorFilter(null); else res.setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN); } * / /** * Sets the specified image buttonto the given state, while modifying or * "graying-out" the icon as well * * @pairam enabled The state of the menu item * @pairam item The menu item to modify * @pairam originalIcon The drawable */ public static void setImageButtonEnabled(Context ctxt, boolean enabled, ImageButton item, Drawable originalIcon) { item.setEnabled(enabled); Drawable res = originalIcon.mutate(); if (enabled) res.setColorFilter(null); else res.setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN); } 

    Se você também possui um desenho transpairente não transpairente (definido com o Android: background), consulte os seletores Android: como fazer um seletor desenhável paira modificair o plano de background.

    Eu preferia replace o método setEnabled() no ImageButton paira alterair a propriedade alfa da image de acordo. Então, quando o button está desativado, a image será paircialmente transpairente e mais desabilitada.

     public class CustomImageButton extends ImageButton { //... @Oviewride public void setEnabled(boolean enabled) { if(this.isEnabled() != enabled) { this.setImageAlpha(enabled ? 0xFF : 0x3F); } super.setEnabled(enabled); } } // ... public class CustomImageButton extends ImageButton { //... @Oviewride public void setEnabled(boolean enabled) { if(this.isEnabled() != enabled) { this.setImageAlpha(enabled ? 0xFF : 0x3F); } super.setEnabled(enabled); } } public void setEnabled (boolean enabled) { public class CustomImageButton extends ImageButton { //... @Oviewride public void setEnabled(boolean enabled) { if(this.isEnabled() != enabled) { this.setImageAlpha(enabled ? 0xFF : 0x3F); } super.setEnabled(enabled); } } } public class CustomImageButton extends ImageButton { //... @Oviewride public void setEnabled(boolean enabled) { if(this.isEnabled() != enabled) { this.setImageAlpha(enabled ? 0xFF : 0x3F); } super.setEnabled(enabled); } } } public class CustomImageButton extends ImageButton { //... @Oviewride public void setEnabled(boolean enabled) { if(this.isEnabled() != enabled) { this.setImageAlpha(enabled ? 0xFF : 0x3F); } super.setEnabled(enabled); } } 

    No entanto, sua image é o fator diferenciador … então, se você não deseja alterair a image, então você não pode dizer se o button da image está desabilitado, habilitado, pressionado.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.