2016-06-24 7 views
0

В моем приложении для Android, когда я добавляю сенсорные методы screeen, и я хочу читать на той же клавиатуре с помощью метода onkey, я просто потерял один из них.Как использовать сенсорный экран и клавиатуру (внешняя клавиатура) в приложении Android forroid 5.1?

Мой вопрос: как я могу использовать их оба в одно и то же время.

вот мой основной класс:

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

} 

} 

И у меня есть класс для сенсорного экрана, который я проверить с помощью метода вытяжки:

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

ответ

0

Я нашел решение, которое является более простым для приложения. Надеюсь, это поможет кому-то. `общественный класс MainActivity расширяет 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

Поддерживает ли устройство мультитач ?

Если да, то попробуйте следующее: (я надеюсь, что это работает)

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

Да мое устройство поддерживает мультитач. Я нашел решение. Существует более простой способ его использования. Я не хочу редактировать текст, когда использую клавиатуру. Я буду заменять клавиатуру usb-сканером, чтобы прочитать ввод пользователей (штрих-код). Спасибо, король! –

+0

Ах приятно слышать, что вы нашли решение @ Ismaela.D :) –

 Смежные вопросы

  • Нет связанных вопросов^_^