【问题标题】:How to use touch screen and keyboard (external keyboard) at the same on android 5.1 app?如何在 android 5.1 应用程序上同时使用触摸屏和键盘(外接键盘)?
【发布时间】:2016-06-24 08:13:07
【问题描述】:

在我的 android 应用程序中,当我添加触摸屏方法并且我想使用 onkey 方法同时读取键盘时,我只是丢失了其中一个。

我的问题是:如何同时使用它们。

这是我的主要课程:

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

}

}

我有一个触摸屏类,我用 draw 方法测试:

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

【问题讨论】:

    标签: java android keyboard touchscreen onkeydown


    【解决方案1】:

    您的设备是否支持多点触控?

    如果是,试试这个:(我希望这可行)

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

    【讨论】:

    • 是的,我的设备支持多点触控。我找到了解决方案。有一种更简单的使用方法。我不想在使用键盘时编辑文本。我将用 USB 扫描仪替换我的键盘,以便读取用户输入(条形码)。谢谢大王!
    • 啊,很高兴听到您找到了解决方案 @Ismaela.D :)
    【解决方案2】:

    我找到了一个对应用程序更简单的解决方案。希望它会帮助某人。 `公共类 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);
     }
    

    } `

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2011-11-27
      相关资源
      最近更新 更多