编程语言
首页 > 编程语言> > java – 有没有一种全局方法可以捕获Android中的所有EditText焦点更改?

java – 有没有一种全局方法可以捕获Android中的所有EditText焦点更改?

作者:互联网

是否有一种聪明的方法可以避免重复第一段代码十几次?第二个块的形式与第一个块相同,我还有几个具有相同的形式.我正在考虑一组EditText字段(好主意?不好[为什么?]?)但是有一种全局方法可以让一个块捕获所有焦点变化吗?

   txtExclude.setOnFocusChangeListener(new View.OnFocusChangeListener() {
       public void onFocusChange(View v, boolean hasFocus) 
       {
           if (!hasFocus)
               if (txtExclude.getText().length() == 0)
                   txtExclude.setBackgroundColor(Color.WHITE);

       }});

   txtRequired.setOnFocusChangeListener(new View.OnFocusChangeListener() {
       public void onFocusChange(View v, boolean hasFocus) 
       {
           if (!hasFocus)
               if(txtRequired.getText().length() == 0)
                   txtRequired.setBackgroundColor(Color.WHITE);
       }});

编辑

非工作实施第一答案:

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

public class MainActivity extends Activity implements View.OnFocusChangeListener
{
   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState); // call superclass's version
      setContentView(R.layout.activity_main); // inflate the GUI

      final EditText txtPattern = (EditText) findViewById(R.id.txtPattern);

       final EditText txtLegal = (EditText) findViewById(R.id.txtLegal);

       final EditText txtExclude = (EditText) findViewById(R.id.txtExclude);

       final EditText txtRequired = (EditText) findViewById(R.id.txtRequired);

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

   } // end method onCreate

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        return; // breakpoint here **********************
    }
} // end class MainActivity

无论在调试期间哪个EditText获得或失去焦点,都未达到断点.

解决方法:

这是另一种方式.

通过继承EditText,如下所示,在包中创建一个CustomEditext类

让你的包是com.android.app

public class CustomEditText extends EditText {

public CustomEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onFocusChanged(boolean focused, int direction,
        Rect previouslyFocusedRect) {

    if (!focused)
        if (getText().length() == 0)
            setBackgroundColor(Color.WHITE);

    super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}

您可以在布局中使用此customEditText,如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<com.android.app.CustomEditText
    android:id="@+id/com.example.customedittext1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="Name"
    android:inputType="textPersonName" >
</com.android.app.CustomEditText>

<com.android.app.CustomEditText
    android:id="@+id/edEmail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="Email"
    android:inputType="textPersonName" >
</com.android.app.CustomEditText>

<com.android.app.CustomEditText
    android:id="@+id/edContact"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="Contact"
    android:inputType="textPersonName" >
</com.android.app.CustomEditText>

您不需要在每个编辑字段上设置onFocusChangedListner().

希望这可以帮助

标签:android,java,lost-focus
来源: https://codeday.me/bug/20190724/1526990.html