我有一张表格。 7垂直布局中的EditText。在一瞬间屏幕上只能看到3个EditText(形式很大所以我需要向上和向下滚动以填充所有文件)。在底部 - 按钮。
当我填充顶部的EditText(或者顶部的一个,当我向下滚动到按钮时它是不可见的),并且在此EditText中聚焦(光标),当我向下滚动并尝试单击按钮一次时 - 没有任何反应。当我再次点击时 - 发生按钮动作。
当具有焦点和按钮的EditText都可见时 - 按钮需要单击一次。
我认为在第一种情况下,首次点击只需要关注。第二次点击是“真实”点击。
我该如何解决?我只需要点击一下Button。感谢
答案 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;
}
});