如何检测android中的焦点EditText?

Ecl*_*fan 36 android android-edittext

我的页面中有许多EditTexts和两个按钮.我希望用户触摸任何一个EditText字段,然后单击任何按钮将特定值插入到EditText他触摸的那个字段中.不允许使用键盘输入.请帮我这样做.

Mr.*_*.Me 55

您可以View.OnFocusChangeListener用来检测是否有任何视图(edittext)获得或失去了焦点.

for (EditText view : editList){
   view.setOnFocusChangeListener(focusListener);
}
....
private OnFocusChangeListener focusListener = new OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus){
             focusedView = v;
        } else {
             focusedView  = null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这包含在您的活动或片段中或您拥有EditTexts的任何位置.该....只是说,你可以把它放在任何地方的类.显然你需要在其中创建一个包含它们的数组,因此editList.


Lil*_*shi 31

这适合我.它返回一个布尔值.

myEditText.hasFocus()
Run Code Online (Sandbox Code Playgroud)


Ank*_*dse 24

有一件事情,你能做的就是声明一个全局变量evalue它会告诉你这是last selected EditTextonTouchListener,然后根据价值evalue,你可以通过设置按钮单击文本价值的EditText上.希望你明白.

它的代码可以如下:

EditText e1,e2;
    Button b1,b2;
    String evalue;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        e1=(EditText)findViewById(R.id.editText1);
        e2=(EditText)findViewById(R.id.editText2);
        b1=(Button)findViewById(R.id.button1);
        b2=(Button)findViewById(R.id.button2);

        e1.setOnTouchListener(new View.OnTouchListener()
        {
            public boolean onTouch(View arg0, MotionEvent arg1)
            {
                evalue="1";
                return false;
            }
        });

        e2.setOnTouchListener(new View.OnTouchListener()
        {
            public boolean onTouch(View arg0, MotionEvent arg1)
            {
                evalue="2";
                return false;
            }
        });
        b1.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View arg0) {
                if(evalue=="1")
                {
                    e1.setText("yes");
                }
                if(evalue=="2")
                {
                    e2.setText("yes");
                }
            }
        });


        b2.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View arg0) {
                if(evalue=="1")
                {
                    e1.setText("No");
                }
                if(evalue=="2")
                {
                    e2.setText("No");
                }
            }
        });

    }
Run Code Online (Sandbox Code Playgroud)

它是一个逻辑编码..没有达到标记..如果你找到一个更好的.然后使用它.谢谢.

  • 我想你已经钉了它.还有许多其他答案假设onFocusChange是必需的侦听器事件.我认为他们这样做是因为他们在考虑PC /浏览器体验.这看似不正确.触摸设备不能像这样工作.问题是,当我测试其他答案时,触摸按钮后光标仍然在字段中"闪烁".因此,这意味着尽管联系屏幕上的另一个UI元素,焦点仍然在现场.因此,您必须检测已触摸的其他内容,而不是该字段是否在焦点上.+1 (3认同)
  • //在可编辑字段之间移动时,onFocusChange事件将起作用。诀窍是试图理解带有虚拟键盘的触摸设备上的行为环境。 (2认同)

goo*_*all 8

有你的Fragment工具OnTouchListener&OnFocusChangeListener:

public class AttributesFragment extends Fragment 
                       implements OnTouchListener, OnFocusChangeListener {
Run Code Online (Sandbox Code Playgroud)

然后实现使用:

@Override
public boolean onTouch(View view, MotionEvent event) {
    if (view instanceof EditText) {
        view.setOnFocusChangeListener(this); // User touched edittext
    }
    return false;
}

@Override
public void onFocusChange(View v, boolean hasFocus) {

}
Run Code Online (Sandbox Code Playgroud)

创建你的后,不要忘记设置你的听众 EditText

editText.setOnTouchListener(this);
Run Code Online (Sandbox Code Playgroud)

这样,如果EditText默认情况下聚焦框但用户未更改字段,则不会触发onFocusChange事件.


olm*_*ocr 8

使用 Java 8 lambdas:

EditText editTextTo = findViewById(R.id.editTextTo);

editTextTo.setOnFocusChangeListener((view, b) -> {
    if (view.isFocused()) {
        // Do whatever you want when the EditText is focused 
        // Example:
        editTextFrom.setText("Focused!");
    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,lambda 函数内的视图实际上是 EditText 的一个实例。


ali*_*son 6

这对我使用 Java 8 (lambdas) 有用:

EditText myEditText = findViewById(R.id.editText);

myEditText.setOnFocusChangeListener((view, hasFocus) -> {
      if(hasFocus){
          Log.e("TAG", "myEditext has focus") 
      }else{
          Log.e("TAG", "myEditext has no focus") 
      }
});
Run Code Online (Sandbox Code Playgroud)


Phi*_*ert 5

这对我有用。

e1 = (EditText) findViewById(R.id.editText1);

e1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
   @Override
   public void onFocusChange(View arg0, boolean hasfocus) {
      if (hasfocus) {
         Log.e("TAG", "e1 focused") 
      } else {
         Log.e("TAG", "e1 not focused") 
      }            
   }
});
Run Code Online (Sandbox Code Playgroud)


小智 5

简单编码:

if(EditText1.isFocused()){
  //EditText1 is focused
}else if(EditText2.isFocused()){
  //EditText2 is focused
}
Run Code Online (Sandbox Code Playgroud)