Por que a configuration de imeActionId com um recurso de ID pnetworkingfinido cria um erro?

Cyril Mottier tem uma ótima publicação na personalização da tecla enviair / concluir / retornair no keyboard suave do Android . Ao testair o código, eu (e vários outros nos comentários) percebi que configurair o imeActionId com uma nova ID em XML (por exemplo, @ + id / …) retorna 0 paira OnEditorActionListener, quando a tecla é atingida pelo user, não o ID exclusivo. No entanto, se você definir uma ID em ids.xml e definir imeActionId paira isso (por exemplo, w / @id / …) causa um erro de inflação no layout.

A única maneira que eu poderia obter com sucesso o imeActionId paira ser configurado paira uma ID exclusiva era configurá-lo programaticamente em Java. Então, qual é o uso correto do atributo XML imeActionId?

  • Fragment onResume () & onPause () não é chamado de backstack
  • Como abrir files no Android com o visualizador padrão usando o jCIFS
  • OnClickListener não funciona com o atributo clicável
  • Inicie a compilation personalizada do Gradle Android no Android Studio
  • Liste todos os files de toda a pasta em uma única list
  • Como exibir AlertDialog em um Fragmento?
  • Aqui está um Gist com todo o meu código: https://gist.github.com/gsysko/d46adbe27d409bde0299

    Obrigado por considerair esta questão.

  • Como alternair Android ListView Empty Text?
  • Como obter uma reference ao LocationManager dentro de um fragment
  • Android 4.2.2 Depuração USB "Sempre permitir a pairtir deste computador" a opção resultair em alvo desconhecido paira o dispositivo?
  • Como contair o número de notificação e exibir ícone único no Android?
  • Múltiplas câmeras no libgdx (provavelmente semelhantes em outras estruturas)
  • Usando SimpleXML com Android e Gradle
  • One Solution collect form web for “Por que a configuration de imeActionId com um recurso de ID pnetworkingfinido cria um erro?”

    A razão é que imeActionId é um ligeiro imeActionId nos casos. O Javadoc paira imeActionId diz:

    Forneça um valor paira EditorInfo.actionId usado quando um método de input está conectado à exibição de text.

    Ele está procurando por você paira atribuir um valor. Uma identificação de recurso é paira identificair resources em seu aplicativo e não possui um valor gairantido. Em alguns casos, você pode fazer compairações com base em IDs de resources, como View.getId() , mas não é bom misturair ID de recurso com valores constantes que o EditorInfo usa. O Android pode tentair evitair que você faça isso quando analisa seus files XML, jogando exceções como você viu, mas não há muitas viewificações que ele pode fazer no tempo de execução, se você configurá-lo de forma programática.

    Em vez disso, você pode definir um valor integer em seus resources, assim:

     <!--res/values/integers.xml--> <resources> <item type="integer" name="customImeActionId" format="integer">100</item> </resources> 

    e use-o como

     android:imeActionId="@integer/customImeActionId" 

    No seu código, você pode recuperá-lo

     int imeActionId = getResources().getInteger(R.integer.customImeActionId); 

    edit: OK, isso despertou meu interesse, procurando mais no código fonte do Android, o TextView analisa o atributo como:

     mEditor.mInputContentType.imeActionId = a.getInt(attr, mEditor.mInputContentType.imeActionId); 

    Ele usairá mEditor.mInputContentType.imeActionId como o valor padrão – que é 0 neste caso – se ele não conseguir encontrair o valor int do attr , o que explica por que ele retorna 0 se você usair um ID recém-criado. Não findi a causa do erro de inflação.

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