Як я можу виявити сфокусовану функцію EditText на android?

У мене є декілька EditText s на моїй сторінці разом з двома кнопками. Я хочу, щоб користувач торкнувся будь-якого поля EditText та натиснув будь-яку кнопку, щоб вставити певне значення у те саме поле, яке він торкнувся EditText . Введення за допомогою клавіатури заборонено. Будь ласка, допоможіть мені це зробити.

24
може бути, ви шукаєте View.setOnTouchListener
додано Автор mihail, джерело
Я дійсно хочу виявити орієнтований вид EditText.
додано Автор Eclipse-fan, джерело

6 Відповіді

Ви можете використовувати 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;
        }
    }
}

Це відбувається у вашій діяльності або фрагменті, або в будь-якому місці, де ви маєте EditTexts. .... просто говорить, що ви можете помістити його де-небудь ще в класі. І, очевидно, вам потрібно буде створити з ними масив, таким чином, editList .

44
додано
Ви спробували цей код? якщо один з введених даних втратив фокус, а хтось отримає його, то слухач буде викликаний двічі. чи може фокус-зображення бути нульовим після цього?
додано Автор Vasilii Suricov, джерело

Це працює для мене. Він повертає логічне значення.

myEditText.hasFocus()
24
додано

Єдине, що ви можете зробити, - оголосити глобальну змінну evalue , яка покаже вам, який останній вибраний EditText , використовуючи onTouchListener , а потім на основі значення evalue , ви можете встановити текстове значення в текст редагування, натиснувши кнопку. сподіваюся, ви зрозуміли

код для нього може бути наступним:

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");
                }
            }
        });

    }

Його логічне кодування ... не до позначки .. якщо ви знайдете краще. потім використовуйте його. спасибі.

13
додано
Я думаю, ти прибив це. Є так багато інших відповідей, які передбачають, що onFocusChange є обов'язковою подією слухача. Я думаю, що вони роблять це, тому що вони думають з точки зору досвіду ПК/браузера. Це здається правильним. Сенсорні пристрої не працюють, як це. Проблема полягає в тому, що коли я перевірюю ці інші відповіді, курсор все ще "блимає" в полі після натискання кнопки. Таким чином, це означає, що фокус все ще знаходиться в області, незважаючи на контакти з іншим елементом інтерфейсу на екрані. Тому ви повинні визначити, що ще торкнувся, а не те, чи є поле фокусом. +1
додано Автор giulio, джерело
// Подія onFocusChange буде працювати при переміщенні між редагованими полями. Хитрість намагається підкреслити контекст поведінки на сенсорних пристроях з віртуальними клавіатурами.
додано Автор giulio, джерело
@ SrujanBarai - можливо, допоможе це .
додано Автор DSlomer64, джерело
чому повернути помилково?
додано Автор Srujan Barai, джерело
Дуже дякую. Це повністю виконало мою вимогу.
додано Автор Eclipse-fan, джерело

Have your Fragment implement OnTouchListener & OnFocusChangeListener:

public class AttributesFragment extends Fragment 
                       implements OnTouchListener, OnFocusChangeListener {

Потім реалізуйте використання:

@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) {

}

Don't forget to set your listener after creating your EditText

editText.setOnTouchListener(this);

Таким чином, якщо поле EditText сфокусовано за замовчуванням, але користувач не змінює поле, він не запускає подія onFocusChange .

7
додано

Це працювало для мене.

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") 
      }            
   }
});
2
додано

У своїй діяльності або фрагменті застосуйте OnFocusChangeListener.

edittextNeme= (EditText) findViewById(R.id.edittextNeme);
edittextNeme.setOnFocusChangeListener(this);

Вам доведеться перевірити, який вигляд змінив фокус, отримавши ідентифікатор перегляду з виглядом view.getId() і обробляти відповідно.

@Override
public void onFocusChange(View view, boolean hasfocus) {
    switch(view.getId()){
    case R.id.edittextNeme:
    //Do something
    break;

    ...etc
    }
}
0
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.