gpt4 book ai didi

android - 旋转器和焦点

转载 作者:行者123 更新时间:2023-11-29 02:15:34 24 4
gpt4 key购买 nike

我在表单 Activity 中遇到旋转器问题。

我原以为微调器会在用户“触摸”它时获得焦点,但这似乎没有发生。如果我使用跟踪球(在 Nexus One 上)在不同组件之间移动,旋转器似乎只会获得焦点。

这很烦人,因为我在表单中的第一个 EditText View 上使用了 android:selectAllOnFocus="true"属性。因为微调器永远不会将焦点从 EditText 组件上移开,所以它的内容总是高亮显示(这在我看来是丑陋的)。

我试过用


spinner.requestFocus();

但这(貌似)没有效果。

我已经尝试在 AdapterView.OnItemSelectedListener 中请求关注微调器,但他的结果是


窗口已聚焦,忽略以下焦点增益:com.android.internal.view.IInputMethodClient$Stub$Proxy@44cb0380

谁能解释这种奇怪的行为和/或可能的解决方法。

非常感谢,

蒂姆

最佳答案

您必须先使用 setFocusableInTouchMode()。然后你遇到了一个不同的问题:你必须点击微调器两次来改变它(一次设置焦点,然后再次查看选项列表)。我的解决方案是创建我自己的 Spinner 子类,使第一次点击的焦点增益模拟第二次点击:

class MySpinnerSubclass extends Spinner {

private final OnFocusChangeListener clickOnFocus = new OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {

// We don't want focusing the spinner with the d-pad to expand it in
// the future, so remove this listener until the next touch event.
setOnFocusChangeListener(null);
performClick();
}
};

// Add whatever constructor(s) you need. Call
// setFocusableInTouchMode(true) in them.

@Override
public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {

// Only register the listener if the spinner does not already have
// focus, otherwise tapping it would leave the listener attached.
if (!hasFocus()) {
setOnFocusChangeListener(clickOnFocus);
}
} else if (action == MotionEvent.ACTION_CANCEL) {
setOnFocusChangeListener(null);
}
return super.onTouchEvent(event);
}
}

为了给予适当的信任,我的灵感来自 Kaptkaos's answerthis question .

关于android - 旋转器和焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4247055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com