Android按钮需要两次单击才能执行操作

时间:2011-05-07 08:04:37

标签: android button focus click android-edittext

我有一张表格。 7垂直布局中的EditText。在一瞬间屏幕上只能看到3个EditText(形式很大所以我需要向上和向下滚动以填充所有文件)。在底部 - 按钮。

当我填充顶部的EditText(或者顶部的一个,当我向下滚动到按钮时它是不可见的),并且在此EditText中聚焦(光标),当我向下滚动并尝试单击按钮一次时 - 没有任何反应。当我再次点击时 - 发生按钮动作。

当具有焦点和按钮的EditText都可见时 - 按钮需要单击一次。

我认为在第一种情况下,首次点击只需要关注。第二次点击是“真实”点击。

我该如何解决?我只需要点击一下Button。感谢

4 个答案:

答案 0 :(得分:24)

这个问题已经过时了,我不知道这是否会解决您的问题,因为您的pastebin链接不再起作用,但由于我偶然发现了同样问题的帖子,我发现了一个解决方案,我会发布它无论如何:

在我的情况下,当我在教程后面的按钮上应用自定义样式时出现了问题:

<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>

删除后,按钮按预期工作。

希望这有帮助。

答案 1 :(得分:11)

我使用以下方法解决了类似的问题。如果第一次点击仅获得焦点,它会再次自动点击该项目:

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

我需要focusableInTouchMode才是真的。

答案 2 :(得分:1)

类似于Maves答案。这对我来说很有把握:

<Button 
    style="@android:style/Widget.EditText"
    android:focusableInTouchMode="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

答案 3 :(得分:0)

老问题我知道。无论如何我有同样的问题,需要按钮可以聚焦。
最后我确实使用了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;                 
    }
});
相关问题