2017-07-01 14 views
0

私はアンドロイドが初めてです。長いプレスを実装してドラッグして、編集テキストのテキストを選択しようとしていました。私はonTouchListnerを使って選択を設定しました。選択部分は正常に動作していますが、これを実装するにはいくつか問題があります。長いテキストを選択してテキストを選択するには、edittextを長押ししてください。

  1. キーボードがポップアップしていません。
  2. テキスト選択ハンドルが表示されていません。
  3. 長いクリックをしてからドラッグしてテキストを選択することはできません(ちょうど ドラッグが機能しています)。

誰かが正しい方向に私を指し示すことができ、または多くの役に立ちそうなコードを共有することができます。 ありがとう!

は、ここで私はあなたがやろうとしているものだと思う私のコード

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

}

+0

私は編集テキストのタップを検出することによってプログラム的にキーボードを呼び出すことができましたが、テキスト選択ハンドルは不運でした。誰かが私がその部分を理解するのを助けることができたら。 – oggy

答えて

0

だEDITTEXTの右にあるテキストを選択するのですか?レイアウトを編集してeditTextに次の行を追加してください。

android:selectAllOnFocus="true" 
0

私はEditTextにデフォルトで必要な操作があると思います。テキスト選択ハンドルとデフォルトでポップアップするキーボードはすでに実装されており、カスタムonTouchListenerでその機能を上書きしている可能性があります。

EditTextでカスタム機能をお探しの場合は、独自のカスタムビューでEditTextを拡張し、必要に応じてカスタムメソッドを作成することをお勧めします。

関連する問題