ボタンなどでフォーカス移動先を指定出来るでしょうか?

1,279 views
Skip to first unread message

K.Asano

unread,
Jan 29, 2014, 12:08:32 AM1/29/14
to android-gr...@googlegroups.com
複数(単数でも)Buttonクリックで指定するEditTextにフォーカスを移せるでしょうか?
下記の単純な例ですが、bt1をクリックしたらet1に、bt2をクリックしたらet2に、フォーカスがあたる方法が知りたいのです。
フォーカスがあたるのは対応するEditTextにカーソルが出現することが重要でして。setFocusableやsetFocusableInTouchModeなどではFocusは移動できないので対応がわかりません。Windowsモバイルでは出来たように思えたのですが、わかりません。
ご教授がいただければ幸いです。


active_main.xml
<LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical">
       <Button 
           android:layout_width="wrap_content" android:layout_height="wrap_content"
           android:id="@+id/btn1" android:text="to EditText1"/>
       <Button 
           android:layout_width="wrap_content" android:layout_height="wrap_content"
           android:id="@+id/btn2" android:text="to EditText2" />
    <EditText     android:layout_width="fill_parent"   android:layout_height="wrap_content"  
        android:hint="EditText1" android:id="@+id/et1" />    
    <EditText     android:layout_width="fill_parent"   android:layout_height="wrap_content"  
        android:hint="EditText2" android:id="@+id/et2" />    
 </LinearLayout>
 

MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1=(Button)findViewById(R.id.btn1);
Button btn2=(Button)findViewById(R.id.btn2);
final EditText et1=(EditText)findViewById(R.id.et1);
final EditText et2=(EditText)findViewById(R.id.et2);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
}
});
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
}
});
}
}

K.Asano

unread,
Jan 31, 2014, 12:44:40 AM1/31/14
to android-gr...@googlegroups.com
中川様のご教授により解決しました。


EditTextのカーソル位置の記憶をしておかないと、カーソル位置を動かしても最後に表示されますので、
無骨なコードですが、とりあえずうまくいきました。

カーソルを見やすくするために
drawable/style_cursor.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <size android:width="4dp" />
  <solid android:color="#ff9999" />
</shape>

レイアウト
layout/activity_main.xml
<LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical">
       <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:id="@+id/btn1"
           android:text="Focus to EditText1" />
       <Button
           android:layout_width="wrap_content" android:layout_height="wrap_content"
           android:id="@+id/btn2" android:text="Focus to EditText2" />
    <EditText     android:layout_width="fill_parent"   android:layout_height="wrap_content"
        android:hint="EditText1" android:id="@+id/et1" android:textCursorDrawable="@drawable/style_cursor"/>
    <EditText     android:layout_width="fill_parent"   android:layout_height="wrap_content"
        android:hint="EditText2" android:id="@+id/et2" android:textCursorDrawable="@drawable/style_cursor"/>
 </LinearLayout>


MainActivity.java

package com.example.focustest;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
int iet1=0;
int iet2=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1=(Button)findViewById(R.id.btn1);
Button btn2=(Button)findViewById(R.id.btn2);
final EditText et1=(EditText)findViewById(R.id.et1);
final EditText et2=(EditText)findViewById(R.id.et2);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
iet2=et2.getSelectionStart();//et2のカーソル位置を取得
et2.setFocusableInTouchMode(false);
et1.setFocusableInTouchMode(true);//Focusをet1に移動
et1.requestFocus(View.FOCUS_UP);
et1.setSelection(iet1);  //et1のカーソル位置にカーソルを表示
}
});
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
iet1=et1.getSelectionStart();//et1のカーソル位置を取得
et1.setFocusableInTouchMode(false);
et2.setFocusableInTouchMode(true);
et2.requestFocus(View.FOCUS_UP);
et2.setSelection(iet2);  //et2のカーソル位置にカーソルを表示
}
});
}
}

youtubeに動作をあげておきました。 
Reply all
Reply to author
Forward
0 new messages