質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

5349閲覧

AndroidでEditTextのカーソルの移動について

karasawa

総合スコア12

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/02/21 01:58

###EditTextでのカーソルの移動について
独学で勉強をしているものです。

EditTextにOnKeyListenerを登録した後に,
ソフトキーボードにある下記の画像の赤丸で囲まれているキーを押して、
EditTextのカーソルを一つ左、一つ右に移動させたいのですが、どのようにすればいいのでしょうか。

イメージ説明

自分で書いたコードが下記になります。

java

1editText.setOnKeyListener(new View.OnKeyListener() { 2 @Override 3 public boolean onKey(View v, int keyCode, KeyEvent event) { 4 if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_DPAD_LEFT)){ 5 //カーソルを左へ移動 6 String textNow = editText.getText().toString(); 7 if(textNow.length() > 0) { 8 Log.d("message", "左"); 9 editText.setSelection(textNow.length() - 1); 10 } 11 }else if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_DPAD_LEFT)){ 12 //カーソルを右へ移動 13 String textNow = editText.getText().toString(); 14 if(editText.getSelectionEnd() != textNow.length()) { 15 Log.d("message", "右"); 16 editText.setSelection(textNow.length() + 1); 17 } 18 } 19 20 21 22 return true; 23 } 24 }); 25

これを実行した場合、
左カーソルキーを押したときは一度だけ左にカーソルを移動できるのですが、
もう一度押した場合は動きません。
右カーソルキーを押したときは、アプリ自体が落ちてしまいます。

どなたかこの処理を解決できるかた、アドバイスを頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・右移動のとき
[1]EditText#getSelectionEndを使って現在位置を取得する。
[2]1で取得した値に1を足す。
[3]2の値がEditText内の文字列の長さ以下。
[4]3を満たすならEditText#setSelectionに2の値を引数にする。

・左移動する
[1]EditText#getSelectionEndを使って現在位置を取得する。
[2]1で取得した値に1を引く。
[3]2の値が0以上。
[4]3を満たすならEditText#setSelectionに2の値を引数にする。

投稿2016/02/21 02:33

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karasawa

2016/02/21 07:44

今回もアドバイスをいただきありがとうございます。 アドバイス通り書きましたところ、無事に思い通りの動きをしてくれました。 教えていただいた後に、自分のコードを見返すと意味の分からないことばかりしていると気づきました。 ともかくこのたびはありがとうございました。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問