Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【Android】画面起動後にフォーカスを当てるViewを指定するのと指定した文字の後にカーソルを移動する

こんにちは。

今回はAndroidのフォーカスについてです。

画面起動後、EditTextなどにフォーカスを自動で当てたりしたいときがあります。
その方法を今回はメモしておきます。

起動後にEditTextにフォーカスを当てる

早速コードです。
レイアウトファイルで定義していきます。

<EditText
   android:id=”@+id/EditText01
   android:layout_width=wrap_content
   android:layout_height=wrap_content
>
   <requestFocus/>
</EditText>

フォーカスを当てておきたいViewに、を指定するだけです。
簡単ですね。

起動後にEditTextにフォーカスを当てない(違うViewに当てる)

今度は、逆に起動後にEditTextにフォーカスを当てない方法です。
起動後にフォーカスがあたってしまうと、キーボードが出てしまって邪魔な時があります。
それを防ぐには、上のを応用していきます。

<EditText
   android:id=”@+id/EditText01
   android:layout_width=wrap_content
   android:layout_height=wrap_content”/>

<TextView
   android:id="@+id/TextView01"
   android:layout_width=wrap_content
   android:layout_height=wrap_content
   android:focusable="true" 
   android:focusableInTouchMode="true"   
>
   <requestFocus /> 
</TextView>

こんな感じです。
EditTextではなく、他のViewにを使ってフォーカスを当てることで、キーボードの出現を防いでいます。
android:focusable="true" や、android:focusableInTouchMode="true も忘れずにしましょう。

指定した文字の後にカーソルを移動

今度は、EditTextに文字列が入っている場合、その文字の指定した位置にカーソルを移動する方法です。

今回は、ボタンを押したらカーソルが移動するようにします。
動的に移動するので、今回はJavaの中でやります。

EditText edit = (EditText)findViewById(R.id.EditText01);
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
      edit.requestFocus(); // EditTextにフォーカスを移動
      edit.setSelection(4); // 4文字目の後にカーソルを移動(最初の文字の前が0となる)
      String str = edit.getText().toString();
      edit.setSelection(str.length()); // 文字列の最後の位置にカーソルを移動
   }
});

こんな感じです。
EditTextのsetSelection関数を使います。
結構簡単ですね。

以上です。
それでは。