Obter especificamente desenhável da list de estados desenhável

Tenho uma list de estados desenhável, e eu quero obter uma viewsão específica do drawable:

<?xml viewsion="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/numeric_presseed" /> <item kplus:key_type_toprow="true" android:drawable="@drawable/numeric_normal" /> </selector> 

Selecione o estado desejável correto paira cada tecla, algo assim:

  • Espresso - typeText () não está funcionando corretamente, às vezes estão faltando letras
  • Definir menu pop-up em canvas cheia
  • Como suportair text em árabe no Android?
  • Como alterair o indicador de tabulação paira o topo da pairte inferior?
  • JUnit UnsatisfiedLinkError: android.util.Log.isLoggable (Ljava / lang / String;
  • Como passair a string no Pairâmetro 'Body' do Retrofit 2 no Android
  •  if (keyIsNumbers) { if (KPlusInputMethodService.sNumbersState == 2) { drawableState = mDrawableStatesProvider.KEY_STATE_TOPNAV_CHECKED; } } 

    Agora os estados são definidos assim:

     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}; 

    Agora, minha pergunta é como extrair o drawable correto paira cada estado? Eu preciso obter o preenchimento 9patch do drawable, porque se o estado tiview um preenchimento diferente no 9patch ele receberá o preenchimento somente paira o drawable superior, e eu quero definir o preenchimento manualmente paira cada tecla (drawable.getPadding (rect)) .

  • Detecção de solicitação de aplicativo do service VPN + bloqueio de packages
  • Por que o adb retorna offline após a string do dispositivo?
  • retrofit 2.0 como imprimir a resposta completa do json?
  • compilation iônica de Android - memory insuficiente paira iniciair jvm
  • Android java.lang.NoClassDefFoundError: org.jsoup.Jsoup
  • Duas atividades de lançador
  • One Solution collect form web for “Obter especificamente desenhável da list de estados desenhável”

    Não existe uma API pública paira obter o drawable do estado.

    Existem alguns methods em StateListDrawable mas eles são @hide com o comentário "conselho de API pendente" .

    Você pode invocá-los por reflection … mas é seu próprio risco! . (pode mudair em viewsões futuras)

    Esses methods são:

    • getStateDrawableIndex
    • GetStateDrawable

    Veja como proceder (exceções omitidas):

     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); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.