Come modificare lo stato del button predefinito in Android senza influenzare gli stati premuti e selezionati?

Sto cercando di rimuovere uno background di ImageButton solo nello stato predefinito. Vorrei che gli Stati pressati e selezionati si comportssero come al solito in modo che possano sembrare corretti su dispositivi diversi che utilizzano diversi colors per gli stati pressati e selezionati.

C'è un modo per impostare un disegni dello stato di default di un ImageButton senza influenzare gli stati premuti e selezionati?

  • Come posso trovare tutti i methods non utilizzati del mio progetto nell'IDEA Android Studio?
  • Scopri se Android WebView mostra la pagina memorizzata nella cache
  • Passare i dati a BroadcastReceiver da attività utilizzando DownloadManager
  • Raw Sockets su Android
  • Android: Come TOTALMENTE disabilitare la function di copia e incolla in Edittext
  • Dopo aver cercato gli elementi di ListView in Android, apri sempre la prima voce di ListView (Issue)
  • Ho provato a fare questo con un selettore, ma non sembra che ti permetta di utilizzare i drawables predefiniti per alcuni stati: devi impostare tutti gli stati. Poiché non esiste alcuna API per recuperare i disegni predefiniti premuti / selezionati del dispositivo, non so cosa impostare gli stati premuti / selezionati.

    Ho anche provato a get l'object StateListDrawable per il button che il sistema crea quando non si utilizza un selettore e quindi lo modifica modificare lo stato predefinito. Anche questo non funzionava.

    Sembra che su Android, se si desidera modificare il disegni per uno stato di un button, è necessario impostare tutti gli stati e quindi non è ansible conservare i disegni predefiniti per gli altri stati. È corretto?

    Grazie! -Tom B.

  • Qualità di rendering ombra in png trasparente su Android
  • Firebase onTokenRefresh () non viene chiamato
  • aggiungere dynamicmente il layout nel metodo getview di adattatore in android
  • Esempi di applicazione, Android Backup Services utilizzati
  • Come posso mostrare la mia attività come dialogo in Android?
  • CPPFLAGS per file in Android.mk
  • 2 Solutions collect form web for “Come modificare lo stato del button predefinito in Android senza influenzare gli stati premuti e selezionati?”

    Tom,

    È vero che se sovrascrivete lo stato predefinito, devi anche ignorare gli stati pressati e concentrati. Il motivo è che il disegnatore predefinito di android è un selettore e pertanto lo supera con un elemento disegnabile statico significa che si perdono le informazioni di stato per gli stati pressati e focalizzati poichè si dispone solo di un disegno specificato per esso. E 'super facile implementare un selettore personalizzato, però. Fare qualcosa di simile:

    <selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/custombutton"> <item android:state_focused="true" android:drawable="@drawable/focused_button" /> <item android:state_pressed="true" android:drawable="@drawable/pressed_button" /> <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/normal_button" /> </selector> 

    Metti questa nella directory dei disegni e carica come un normale disegnatore per lo background dell'image ImageButton. La parte più difficile per me è la progettazione delle immagini reali.

    Edit:

    Solo alcuni hanno scavato nella fonte di EditText, e così sono stati disegnati lo background:

     public EditText(/*Context context, AttributeSet attrs, int defStyle*/) { super(/*context, attrs, defStyle*/); StateListDrawable mStateContainer = new StateListDrawable(); ShapeDrawable pressedDrawable = new ShapeDrawable(new RoundRectShape(10,10)); pressedDrawable.getPaint().setStyle(Paint.FILL); pressedDrawable.getPaint().setColor(0xEDEFF1); ShapeDrawable focusedDrawable = new ShapeDrawable(new RoundRectShape(10,10)); focusedDrawable.getPaint().setStyle(Paint.FILL); focusedDrawable.getPaint().setColor(0x5A8AC1); ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(10,10)); defaultDrawable.getPaint().setStyle(Paint.FILL); defaultDrawable.getPaint().setColor(Color.GRAY); mStateContainer.addState(View.PRESSED_STATE_SET, pressedDrawable); mStateContainer.addState(View.FOCUSED_STATE_SET, focusedDrawable); mStateContainer.addState(StateSet.WILD_CARD, defaultDrawable); this.setBackgroundDrawable(mStateContainer); } 

    Sono sicuro che potresti adattare l'idea ai tuoi scopi. Ecco la pagina che l'ho trovata su:

    http://www.google.com/codesearch/p?hl=en#ML2Ie1A679g/src/android/widget/EditText.java

     StateListDrawable replace = new StateListDrawable(); Drawable old = getBackground(); replace.addState(FOCUSED_STATE_SET, old); replace.addState(SELECTED_STATE_SET, old); replace.addState(PRESSED_STATE_SET, old); replace.addState(StateSet.WILD_CARD, new ColorDrawable(Color.TRANSPARENT)); if (Build.VERSION.SDK_INT >= 16) { setBackground(replace); } else { setBackgroundDrawable(replace); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.