Кнопка Android требует двух нажатий для действия - PullRequest
17 голосов
/ 07 мая 2011

У меня есть форма.7 EditText в вертикальном расположении.На экране в один момент можно увидеть только 3 EditText (форма большая, поэтому мне нужно прокручивать вверх и вниз, чтобы заполнить все поля).Внизу - Button.

Когда я заполняю верхний EditText (или один из верхних, который невидим при прокрутке вниз до кнопки) и фокусируюсь (курсор) в этом EditText, когда я прокручиваю вниз и пытаюсь нажатьКнопка один раз - ничего не происходит.когда я нажимаю снова - происходит действие кнопки.

Когда виден и EditText с фокусом, и кнопка - кнопка требует одного нажатия.

Я думаю, что в первом случае первый щелчок просто фокусируется.И второй щелчок - это «настоящий» щелчок.

Как я могу это исправить?Мне нужно всего лишь одно нажатие на кнопку.Спасибо

Ответы [ 4 ]

25 голосов
/ 13 апреля 2012

Вопрос старый, и я не знаю, решит ли это вашу проблему, поскольку ваша ссылка на ссылку больше не работает, но, поскольку я наткнулся на ваш пост с той же проблемой и нашел решение, я опубликую егов любом случае:

В моем случае проблема возникла, когда я применил собственный стиль к кнопке после урока:

<style name="ButtonStyle" parent="@android:style/Widget.Holo.Button">
    <item name="android:focusable">true</item>
    <item name="android:focusableInTouchMode">true</item>
    <item name="android:clickable">true</item>
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:textColor">@color/somecolor</item>
    <item name="android:gravity">center</item>
</style>

Проблема заключалась в следующей строке:

<item name="android:focusableInTouchMode">true</item>

Как только я удалил ее, кнопка сработала, как и ожидалось.

Надеюсь, это поможет.

12 голосов
/ 20 марта 2013

Я использовал следующее для решения аналогичной проблемы. Он автоматически нажимает на элемент снова, если только первый щелчок получает фокус:

input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    v.performClick();
                }
            }
        });

Мне нужно, чтобы focusableInTouchMode был истинным.

1 голос
/ 30 декабря 2015

Похоже на ответ Мэйвса. Это помогло мне:

<Button 
    style="@android:style/Widget.EditText"
    android:focusableInTouchMode="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
0 голосов
/ 18 августа 2017

Старый вопрос, который я знаю.В любом случае, у меня была та же проблема, и мне нужно, чтобы кнопка была фокусируемой.
В конце концов я использовал OnTouchListener.

myButton.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        int action = motionEvent.getAction();
        if (action == MotionEvent.ACTION_DOWN) {
            // do your stuff on down here
        } else if (action == MotionEvent.ACTION_UP) {
            // do your stuff on up here
        }

        // if you return true then the event is not bubbled e.g. if you don't want the control to get focus or other handlers..

        return false;                 
    }
});
...