Ottieni un disegno specifico dall'elenco di stato disegnabile

Ho un elenco di stato disegnabile e voglio get un disegno specifico dalla list di stato disegnabile:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:kplus="http://schemas.android.com/apk/res-auto"> <item kplus:key_type_space_alt="true" android:state_pressed="true" android:drawable="@drawable/space_1_pressed" /> <item kplus:key_type_space_alt="true" android:drawable="@drawable/space_1_normal" /> <!-- TopNav keys. --> <item kplus:key_type_topnav="true" android:state_pressed="true" android:drawable="@drawable/tab_down" /> <item kplus:key_type_topnav="true" android:state_selected="true" android:drawable="@drawable/tab_down" /> <item kplus:key_type_topnav="true" android:drawable="@drawable/tab_normal" /> <!-- TopRow keys. --> <item kplus:key_type_toprow="true" android:state_pressed="true" android:drawable="@drawable/numbersc_presseed" /> <item kplus:key_type_toprow="true" android:drawable="@drawable/numbersc_normal" /> </selector> 

Io seleziono lo stato di distriggerszione corretto per each chiave, qualcosa di simile:

  • LLDB: aggiungere file di simboli?
  • Impostare singole righe di TextView a width diversa
  • Android: Conserva nome utente nella session fino all'output
  • Imposta MonkeyRunner su Android
  • controllare la distriggerszione della cache di DNS in Android
  • ciò che è sbagliato con questo codice dà errore
  •  if (keyIsNumbers) { if (KPlusInputMethodService.sNumbersState == 2) { drawableState = mDrawableStatesProvider.KEY_STATE_TOPNAV_CHECKED; } } 

    Ora gli stati sono così definiti:

     KEY_STATE_TOPNAV_NORMAL = new int[] {keyTypeTopNavAttrId}; KEY_STATE_TOPNAV_PRESSED = new int[] {keyTypeTopNavAttrId, android.R.attr.state_pressed}; KEY_STATE_TOPNAV_CHECKED = new int[] {keyTypeTopNavAttrId, android.R.attr.state_selected}; 

    Ora la mia domanda è come estrarre il giusto disegnatore per each stato? Ho bisogno di get l'imbottitura 9patch del drawable, perché se lo stato ha un imbottitura diverso su 9patch otterrà l'imbottitura solo per il disegnatore superiore e voglio impostare l'imbottitura manualmente per each tasto (drawable.getPadding (rect)) .

  • Invio di allegati PNG tramite app Android GMail
  • errore: nessun identificatore di risorse trovato per l'attributo "showAsAction" nel pacchetto android
  • Ascoltare i messaggi e le notifiche in arrivo di Whatsapp
  • Modifica dell'icona di overflow della barra di azione
  • streaming audio .m3u
  • Costruire un sovrapposto personalizzato con cerchio con raggio (colorato) in Android MapBox GL
  • One Solution collect form web for “Ottieni un disegno specifico dall'elenco di stato disegnabile”

    Non esiste alcuna API pubblica per get il tracciato dallo stato.

    Esistono alcuni methods in StateListDrawable ma sono @hide con il commento "consiglio API in sospeso" .

    Puoi invocarli per riflessione … ma è a tuo rischio! . (può cambiare nelle versioni future)

    Questi methods sono:

    • getStateDrawableIndex
    • getStateDrawable

    Ecco come procedere (eccezioni omesse):

     int[] currentState = view.getDrawableState(); StateListDrawable stateListDrawable = (StateListDrawable)view.getBackground(); Method getStateDrawableIndex = StateListDrawable.class.getMethod("getStateDrawableIndex", int[].class); Method getStateDrawable = StateListDrawable.class.getMethod("getStateDrawable", int.class); int index = (int) getStateDrawableIndex.invoke(stateListDrawable,currentState); Drawable drawable = (Drawable) getStateDrawable.invoke(stateListDrawable,index); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.