私はアンドロイドが初めてです。長いプレスを実装してドラッグして、編集テキストのテキストを選択しようとしていました。私はonTouchListnerを使って選択を設定しました。選択部分は正常に動作していますが、これを実装するにはいくつか問題があります。長いテキストを選択してテキストを選択するには、edittextを長押ししてください。
- キーボードがポップアップしていません。
- テキスト選択ハンドルが表示されていません。
- 長いクリックをしてからドラッグしてテキストを選択することはできません(ちょうど ドラッグが機能しています)。
誰かが正しい方向に私を指し示すことができ、または多くの役に立ちそうなコードを共有することができます。 ありがとう!
は、ここで私はあなたがやろうとしているものだと思う私のコード
public class MainActivity extends AppCompatActivity {
private float mLastTouchX;
private float mLastTouchy;
private EditText sampleET;
private int start;
private int stop;
private String log = "MAIN_ACTIVITY";
private int mActivePointerId = INVALID_POINTER_ID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sampleET = (EditText) findViewById(R.id.sample_ET);
sampleET.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (MotionEventCompat.getActionMasked(event)) {
case MotionEvent.ACTION_DOWN: {
final float x = event.getX();
final float y = event.getY();
// start pos
mLastTouchX = x;
mLastTouchy = y;
Log.d(log, "Start X" + mLastTouchX);
Log.d(log, "Start Y" + mLastTouchy);
start = sampleET.getOffsetForPosition(x, y);
sampleET.setSelection(start);
// finger id saved
mActivePointerId = event.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final float x = event.getX();
final float y = event.getY();
Log.d(log, "New X" + x);
Log.d(log, "New Y" + y);
stop = sampleET.getOffsetForPosition(x, y);
sampleET.setSelection(start, stop);
break;
}
case MotionEvent.ACTION_UP: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = MotionEventCompat.getActionIndex(event);
final int pointerId = event.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
// active pointer up. Choose a new
// active pointer and adjust.
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = event.getX(newPointerIndex);
mLastTouchy = event.getY(newPointerIndex);
mActivePointerId = event.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
});
}
}
私は編集テキストのタップを検出することによってプログラム的にキーボードを呼び出すことができましたが、テキスト選択ハンドルは不運でした。誰かが私がその部分を理解するのを助けることができたら。 – oggy