Autore Topic: Come rilevare quale tasto ho premuto con un tastiera QUERTY  (Letto 1392 volte)

Offline golinux

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Motorola Fire
  • Play Store ID:
    --
  • Sistema operativo:
    Mageia 3
Come rilevare quale tasto ho premuto con un tastiera QUERTY
« il: 11 Settembre 2012, 17:50:17 CEST »
0
Sono nuovo di android.
Ho comprato un motorola fire XT311 con Android 2.3.4 e tastiera qwerty fissa.
ora vorrei trasportare sul cellulare un vecchio programma java che usavo su linux eseguendolo da terminale.

In pratica e' una specie di dizionario, inserita una parola con la tastiera me ne da un'altra.
Mi servirebbe il vostro aiuto per iniziare.
Mi serve sapere quali istruzioni devo usare per leggere i tasti premuti sulla tastiera e quale per scrivere sullo schermo in stile System.out.print(string)
Per rilevare la tastiera mi servirebbe un metodo per leggere un carattere alla volta e non un InputText grafico.
L'ideale sarebbe se qualcuno di grande generosita' mi scrivesse un semplice programma che legge uno alla volta il tasto digitato sulla tastiera, lo memorizza in una variabile e poi lo stampa sullo schermo. E magari se si preme xxx di seguito esce  dal programma o qualsiasi altro modo per chiudere, perche' penso che Ctrl-C non funzioni su android.
L'ideale sarebbe avere un file apk completo, cosi' sarei sicuro di non avere problemi di compilazione, cosi' da potermi dedicare all'implementazione del codice che mi serve.
Nello specifico ho un array di circa 3000 corrispondenze di 2 stringhe, la prima e' di 5 lettere e la seconda e' variabile.

String [ ][ ] = tabella {
{"qccld","Pinco Pallino"},
{"celad","Caio Sempronio"},
{"qdsoe","Pippo Pelo"}
};

Se digito sulla tastiera celad, mi dovrebbe scrivere celad e poi Caio Sempronio

Vi ringrazio tanto in anticipo per qualsiasi contributo anche piccolo o banale.
Purtroppo sono nuovo di android, sembra un bel mondo e poi amo Java!
Per il momento ho installato Eclipse e l'Android Plug-in e sto cercando di far funzionare un semplice programma Hello Word preso da una guida.

grazie
La mia email se vorreste inviare un programma di base e':  golinux (at) tiscalinet.it

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Come rilevare quale tasto ho premuto con un tastiera QUERTY
« Risposta #1 il: 13 Settembre 2012, 12:24:38 CEST »
0
...non credo sia fattibile come vuoi farlo tu.
In ogni caso devi creare un Activity con un suo XML (layout grafico), nel quale devi definire un campo di testo per visualizzare il tutto. Nell'activity fai l'override del metodo onKeyDown() e in base all'int passato, agisci...a questo punto puoi fare quello che vuoi, tipo salvare il carattere assegnato all'int e eseguire metodi in base al carattere/stringa.

P.S. ti consiglio di usare una HashMap invece che una Matrice
« Ultima modifica: 13 Settembre 2012, 12:26:26 CEST da emaborsa »

Offline golinux

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Motorola Fire
  • Play Store ID:
    --
  • Sistema operativo:
    Mageia 3
Re:Come rilevare quale tasto ho premuto con un tastiera QUERTY
« Risposta #2 il: 18 Settembre 2012, 00:29:51 CEST »
0
Ho seguito i tuoi consigli, mi sono documentato un po'...
ho preso come base l'applicazione hello word avanzato descritta in questo blog:
  [DEV] – Tutorial Android : Hello world avanzato | Nexus Lab - Android Blog Italia

In pratica si tratta di 2 campi di input di testo, uno solo numerico e l'altro solo testuale, e poi un bottone prosegui
che se premuto da un tootip con la visualizzazione dei due campi concatenati.

Io l'ho modificato mettendoci l'overide del onKeyDown nel MainActivity.java pero' il risultato e'
se clicco sul primo campo di input, se digito lettere mi funziona l'if del onKeyDown, ad esempio se premo il tasto
"a" mi esce il tooltip con scritto:   key:29tasto:a
se premo z mi scrive:                    key:54tasto:z
e in ogni caso non mi compare nulla nel campo di testo
SE INVECE premo un numero non mi esce nessun tooltip e viene inserito il numero digitato nel campo di input
Tra parentesi il tasto 1 corrisponde al tasto q sulla mia tastiera QWERTY e dovrebbe uscire 1 solo se premo il tasto ALT
altrimenti dovrebbe uscire "q". Probabilmente esce 1 perche' il campo di input e' settato essere un campo di tipo numerico
Come posso fare per poter leggere tutti i tasti della tastiera, compresa la prima riga da "q" a "p"?
A me interessano solo le lettere e non i numeri.

Poi se clicco sul secondo campo di input, qualsiasi tasto premo, viene inserito e visualizzato normalmente  nel campo di testo, senza attivare nessun tooltip.

Del secondo campo di input non mi importa nulla, faceva parte dell'app di hello word.

Se mi date qualche dritta, perche' e' anche molto scomodo eseguire ogni volta l'app, per provarla, perche' nell'emulatore non funziona,
in quanto onkeydown penso non rilevi la softkeyboard, ma devo per forza creare l'apk e portare e installare l'app sul telefonino.

Ultima domanda, dove mi conviene mettere la matrice o hashmap di cui parlavo prima e come dichiararla (public, final ecc.), perche' io pensavo di metterla nel MainActivity.java ma ho letto  che l'activity viene caricata una continuazione da android.

Vi ringrazio tantissimo per la collaborazione!

Ecco il codice di MainActivity.java:


package it.devapp.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    EditText txtNome = null;
    EditText txtNumero = null;
    Button btnProcedi = null;
 
    /** Chiamato quando l'activity viene chiamata  per la prima volta
     */
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Associa un layout alla view
        setContentView(R.layout.activity_main);

        // Recupero i dati dei componenti
        txtNumero = (EditText) findViewById(R.id.numero);
        txtNome = (EditText) findViewById(R.id.nome);

        // Questo non e' realmente necessario (grazie all'uso dell'attributo onClick)
        btnProcedi = (Button) findViewById(R.id.main_btnok);
        Log.d(getClass().getName(), "Activity Creata");   
        }
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         getMenuInflater().inflate(R.menu.activity_main, menu);
         return true; 
     }
     
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (keyCode > 0 || keyCode < 127)  {
            Toast toast = Toast.makeText(getBaseContext(), null, Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.setText("key:"+keyCode+"tasto:"+(char)(keyCode+68));
            toast.show();           
         }
         return super.onKeyDown(keyCode, event);
     }
     
     
     public void onBtnProcedi(View v) {
           Toast toast = Toast.makeText(getBaseContext(), null, Toast.LENGTH_SHORT);
           toast.setGravity(Gravity.CENTER, 0, 0);
           toast.setText(txtNumero.getText() + " - " + txtNome.getText());
           toast.show();
        }
}


E questo il codice del file layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent" >

 <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"
 android:text="hello" />

 <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
 android:text="Numero: " android:paddingTop="20dip"  />

 <EditText android:id="@+id/numero"  android:layout_width="fill_parent" android:layout_height="wrap_content"
 android:inputType="number"     android:imeOptions="actionNext" />

 <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
 android:text="Nome: " android:paddingTop="20dip"/>
 <EditText android:id="@+id/nome"  android:layout_width="fill_parent"
 android:layout_height="wrap_content" />

 <!-- Pulsante di attivazione -->
 <Button android:id="@+id/main_btnok" android:layout_width="wrap_content" android:layout_height="wrap_content"
 android:text="procedi"  android:onClick="onBtnProcedi" />

</LinearLayout>


Allego anche l'apk gia' segnato,  per qualche prova su un vosto device, se volete posso mandare tutto il progetto con i sorgenti se mi dite come fare con eclipse