今日、ViewPagerを使っていて、ページの中にEditTextを入れたのですが、困ったことにEditTextのカーソルが端にあるときに、カーソルを動かそうとするとページが変わってしまうという現象が起こりました。調べても出てこなかったので、ここにまとめたいと思います。
まず、EditTextのOnKeyListenerを下のように定義します。
public class OnKeyDownDisablePageChange implements EditText.OnKeyListener {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case (KeyEvent.KEYCODE_DPAD_LEFT):
// ←ボタンが押されたら
if (mEditMemo.getSelectionEnd() == 0) {
// 選択範囲の終わり(カーソルも含む)が左端だったら
return true;
// その他のonKeyの動作を無効にする(ページが変わらない)
}
break;
case (KeyEvent.KEYCODE_DPAD_RIGHT):
// →ボタンが押されたら
int length = ((EditText) v).getText().length();
if (mEditMemo.getSelectionStart() == length) {
// 選択範囲の始まり(カーソルも含む)が右端だったら
return true;
// その他のonKeyの動作を無効にする(ページが変わらない)
}
break;
}
return false;
// なにもない場合はカーソルを移動する
}
}
こうすることで、カーソルが端から出ようとするとき(ViewPagerにページを変える通知を送るとき)の動作を無効にしています。そしてViewPagerのページのFragmentの中で
OnKeyDownDisablePageChange mOnKeyDownDisablePageChange = new OnKeyDownDisablePageChange();のように定義して
mEditText.setOnKeyListener(mOnKeyDownDisablePageChange);などとEditTextのsetOnKeyListenerを使って適用させれば良いと思います。
0 件のコメント:
コメントを投稿