/ / onKeyDown n'est pas appelé lors de l'utilisation de claviers logiciels - Android

onKeyDown n'est pas appelé lors de l'utilisation de claviers numériques - Android

Mon code XML pour mon activité est

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

POUR ajouter l'événement clé pour cela, j'ai codé dans l'activité principale comme ceci

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();

}


}

quand j'appuie sur A depuis le clavier virtuel ... la méthode onKeyDown ou onKeyUp n'est pas appelée ... quelqu'un me dit comment invoquer ces méthodes lorsque j'appuie sur l'alphabet dans le clavier virtuel ..

Réponses:

6 pour la réponse № 1

De http://developer.android.com/reference/android/view/KeyEvent.html

* Comme les méthodes de saisie logicielles peuvent utiliser plusieurs etméthodes inventives de saisie de texte, rien ne garantit qu’une pression sur un clavier logiciel génère un événement clé: cela est laissé à la discrétion de l’IME et il est en fait déconseillé d’envoyer de tels événements. Vous ne devez jamais vous fier à recevoir KeyEvents. En particulier, le clavier logiciel par défaut n’enverra jamais d’événement de touche à une application ciblant Jelly Bean ou une version ultérieure, et n’enverra que les événements correspondant à certaines pressions de la suppression et les touches retournées aux applications ciblant Ice Cream. Sandwich ou version antérieure. N'oubliez pas que les autres méthodes de saisie logicielles peuvent ne jamais envoyer d'événements clés, quelle que soit leur version. Utilisez des actions d'éditeur telles que IME_ACTION_DONE si vous avez besoin d'une interaction spécifique avec le clavier logiciel, car elle donne plus de visibilité à l'utilisateur sur la réagira aux appuis sur les touches. *

Ainsi, la plupart des clés ne génèrent aucune L'évenement important. Le seul moyen de savoir quelle touche est enfoncée est de TextWatcher.