こんにちは。
マイ・フェイバリット・マンガは『宇宙兄弟』、mukaiyachiです。
AndroidのEditText制御Tipsの3回目です。
前回ではキーボードをエンターキーが押されたら閉じる方法を書きました。
今回は、「 エンターボタンを押した時の次のフォーカス先を指定する方法」について紹介します。
フォーカスの移動の支持(エンターキーを押したときなど)があった場合、通常は支持の方向にあった一番近いオブジェクトに遷移します。
そうではなく、自分で遷移先を変えたい場合や明示的に指定したい場合は、ViewクラスのsetNextFocusDownId()メソッドを使用することで可能になります。
Androidのリファレンスページ
http://developer.android.com/reference/android/view/View.html#setNextFocusDownId(int)
今回はこのような画面を作ります。
EditTextを縦や横に並べた電話番号と住所を入力するような画面です。
まずはレイアウトファイルをつくります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/light_gray" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp" android:text="電話番号" android:textSize="30sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/editText1" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="30dp" android:background="@color/white" android:inputType="text" android:textSize="30sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp" android:text="-" android:textSize="30sp" /> <EditText android:id="@+id/editText2" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="30dp" android:background="@color/white" android:inputType="text" android:textSize="30sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp" android:text="-" android:textSize="30sp" /> <EditText android:id="@+id/editText3" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="30dp" android:background="@color/white" android:inputType="text" android:textSize="30sp" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp" android:text="住所" android:textSize="30sp" /> <EditText android:id="@+id/editText4" android:layout_width="500dp" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="30dp" android:background="@color/white" android:inputType="text" android:textSize="30sp" /> </LinearLayout> |
次にアクティビティ側です。
■アクティビティ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class HelloActivity extends Activity { private EditText editText1; private EditText editText2; private EditText editText3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // EditTextオブジェクト editText1 = (EditText) findViewById(R.id.editText1); editText2 = (EditText) findViewById(R.id.editText2); editText3 = (EditText) findViewById(R.id.editText3); //editText1から下方向に遷移するときの遷移先は「リソースidがeditText2のEditText」と指定 editText1.setNextFocusDownId(R.id.editText2); //editText2から下方向に遷移するときの遷移先は「リソースidがeditText3のEditText」と指定 editText2.setNextFocusDownId(R.id.editText3); //editText3から下方向に遷移するときの遷移先は「リソースidがeditText4のEditText」と指定 editText3.setNextFocusDownId(R.id.editText4); } } |
例えば遷移先を何も指定しない場合、①のEditTextでエンターキーを押すと、④のEditTextに遷移してしまいます。
そうではなくて、①のEditTextが入力し終わったら②のEditTextに遷移させたい場合は、「setNextFocusDownId」で次の遷移先を指定する必要があります。
以上となります。
ぜひお試しください。