2016-06-24 28 views
0

In meiner Android-App, wenn ich Touch Screenen Methoden hinzufügen und ich möchte gleichzeitig die Tastatur mit Onkey-Methode zu lesen, verlor ich nur eine von ihnen.Wie Touchscreen und Tastatur (externe Tastatur) gleichzeitig auf Android 5.1 App verwenden?

Meine Frage ist: Wie kann ich sie beide zur gleichen Zeit verwenden.

hier ist meine Hauptklasse:

public class SingleTouchActivity extends AppCompatActivity { 


EditText edit; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
// setContentView(R.layout.activity_single_touch); 

    setContentView(new SingleTouchEventView(this, null)); 
    edit= (EditText) findViewById(R.id.editText); 
    } 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_0){ 
    edit.setText("here we go"); 

    } 
    return super.onKeyDown(keyCode,event); 

} 

} 

Und ich habe eine Klasse für Touch-Screen, die ich mit Draw-Verfahren testen:

public class SingleTouchEventView extends View { 

private Paint paint = new Paint(); 
private Path path = new Path(); 

public SingleTouchEventView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.setFocusable(true); 

    paint.setAntiAlias(true); 
    paint.setStrokeWidth(6f); 
    paint.setColor(Color.BLACK); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND);  
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
} 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float eventX = event.getX(); 
    float eventY = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      path.moveTo(eventX, eventY); 
      return true; 
     case MotionEvent.ACTION_MOVE: 
      path.lineTo(eventX, eventY); 
      break; 
     case MotionEvent.ACTION_UP: 
      // nothing to do 
      break; 
     default: 
      return false; 
    } 
    // Schedules a repaint. 
    invalidate(); 
    return true; 
} 
} 

Antwort

0

ich eine Lösung gefunden haben, die für die Anwendung einfacher ist. Hoffe es wird jemandem helfen. `public class MainActivity erweitert AppCompatActivity {

View myView; 
    public boolean tmpflag = true; 


    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    myView= findViewById(R.id.Rec); 
} 
@Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
    int action = ev.getAction(); 

    if (action == MotionEvent.ACTION_DOWN) { 

     if (tmpflag) { 

      myView.setBackgroundColor(Color.RED); 
      tmpflag = false; 
     } else { 

      myView.setBackgroundColor(Color.BLUE); 
      tmpflag = true; 
     } 
     return true; 
    } 

    return super.dispatchTouchEvent(ev); 
    } 

    public boolean dispatchKeyEvent(KeyEvent event) { 

    int action = event.getAction(); 
    int keycode= event.getKeyCode(); 


    if (action == KeyEvent.ACTION_DOWN) { 
     if (keycode ==KeyEvent.KEYCODE_ENTER){ 


     if (tmpflag) { 

      myView.setBackgroundColor(Color.RED); 
      tmpflag = false; 
     } else { 

      myView.setBackgroundColor(Color.BLUE); 
      tmpflag = true; 
     } } 
     return true; 
    } 

    return super.dispatchKeyEvent(event); 
} 

} `

0

Hat Ihr Gerät unterstützt Multi-Touch ?

Wenn ja, versuchen Sie dies: (ich hoffe, das funktioniert)

public class SingleTouchActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // setContentView(R.layout.activity_single_touch); 

     setContentView(new SingleTouchEventView(this, null)); 

     try { 
      ViewGroup vx = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content); 
      EditText et = new EditText(this); 
      et.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
      vx.addView(et); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

    } 
} 
+0

Ja mein Gerät Unterstützung Multi-Touch. Ich habe eine Lösung gefunden. Es gibt einen einfacheren Weg, es zu benutzen. Ich möchte keinen Text bearbeiten, wenn ich die Tastatur benutze. Ich werde meine Tastatur durch USB-Scanner ersetzen, um die Benutzereingabe (Barcode) zu lesen. Danke dir König! –

+0

Ah schön zu hören, dass Sie eine Lösung gefunden @ Ismaela.D :) –