/ / onKeyDown não é invocado durante o uso de soft keypads - android

onKeyDown não é invocado durante o uso de soft keypads - android

Meu código xml para minha atividade é

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<EditText
android:id="@+id/et1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

</RelativeLayout>

Para adicionar Evento Chave para isso eu codifiquei na atividade principal como este

public class MainActivity extends Activity
{
EditText e1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e1=(EditText)findViewById(R.id.et1);
/*  e1.setOnKeyListener(new OnKeyListener() {

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("keycode","Inside on key");
//char a=event.getDisplayLabel();
char a = (char)event.getUnicodeChar();
Log.i("keycode",Character.toString(a));
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Log.i("keycode",Integer.toString(keyCode));
Log.i("keycode",(e1.getText()).toString());
return true;
}
else
{
return false;
}


// TODO Auto-generated method stub

}
});*/


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.i("key","KeyPressed"+Integer.toString(keyCode));
Log.i("keycode",(e1.getText()).toString());
return super.onKeyDown(keyCode, event);
}



@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub

switch(keyCode)
{
case KeyEvent.KEYCODE_A:
{
Log.i("key1","KeyPressed A");
Log.i("keycode1",(e1.getText()).toString());

return true;
}
}
return super.onKeyUp(keyCode, event);
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Closing Activity")
.setMessage("Are you sure you want to close this activity?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}

})
.setNegativeButton("No", null)
.show();

}


}

quando eu pressiono A do teclado numérico ... o método onKeyDown ou onKeyUp não é chamado ... alguém me diz o caminho para invocar esses métodos quando eu pressiono o alfabeto no teclado macio.

Respostas:

6 para resposta № 1

A partir de http://developer.android.com/reference/android/view/KeyEvent.html

* Como métodos de entrada suaves podem usar múltiplos emaneiras inventivas de introduzir texto, não há garantia de que qualquer pressionamento de tecla em um teclado virtual gere um evento chave: isso é deixado à critério do IME e, na verdade, o envio de tais eventos é desencorajado. Você nunca deve confiar no recebimento de KeyEvents para qualquer tecla em um método de entrada suave.Em particular, o teclado de software padrão nunca enviará qualquer evento de chave para qualquer aplicativo destinado a Jelly Bean ou posterior, e enviará eventos apenas para alguns pressionamentos das teclas de exclusão e retorno para aplicativos destinados ao Ice Cream Antes de mais nada, esteja ciente de que outros métodos de entrada de software nunca podem enviar eventos importantes, independentemente da versão.Pode considerar usar ações do editor como IME_ACTION_DONE se precisar de interação específica com o teclado do software, pois isso dá mais visibilidade ao usuário irá reagir às teclas pressionadas. *

Assim, a maioria das chaves não gera nenhum Evento-chave. A única maneira de capturar qual tecla é pressionada é através TextWatcher.