在Android TimePicker上禁用键盘输入

时间:2010-03-06 03:17:34

标签: android

我正在开发使用1.6 SDK的Android应用程序。我正在使用TimePicker,当您点击TimePicker中的数字时,我不希望软键盘出现。我只想使用加号和减号按钮更改TimePicker。我尝试过使用android:focusable="false"android:focusableInTouchMode="false"希望有人这样做,但他们似乎没有做任何事情。有没有办法做到这一点?

7 个答案:

答案 0 :(得分:53)

尝试使用:

myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

禁用焦点内部NumberPickers的文本视图

答案 1 :(得分:11)

另一种方式。在XML中添加:

<强> android:descendantFocusability="blocksDescendants"

答案 2 :(得分:3)

XML:

<NumberPicker
    ...
    android:descendantFocusability="blocksDescendants" />

答案 3 :(得分:2)

不知道这是否适用于TimePicker,但我找到了正确的参数,用于防止在聚焦编辑文本或在其内容上使用复制和粘贴菜单时显示键盘:

首先,您应该致电setInputType(InputType.TYPE_NULL)上的editText

接下来实例化InputTypeManager:

InputMethodManager imm = 
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

然后,在hideSoftInputFromWindow()对象上调用imm,但使用InputMethodManager.HIDE_NOT_ALWAYS作为第二个参数而不是0(如第一个答案中所建议的那样):

imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)

即使使用菜单键执行复制/粘贴操作,这也可以防止软键盘在单击/聚焦此EditText控件时弹出。

PS:如果你想阻止复制/粘贴操作,你可以调用editText.setEditable(false)但是你将无法动态更改EditText的内容。

答案 4 :(得分:2)

我刚试过(定位4.0.3)

myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

没有成功。搜索谷歌搜索“android TimePicker BLOCK_DESCENDANTS不工作”后,我跟着点击

http://code.google.com/p/android/issues/detail?id=38369

最后一个帖子是“项目成员”,其中说明:

“后代可聚焦性是指视图获得焦点的能力,如使用键盘,轨迹球或d-pad进行焦点遍历。它不会影响设计中的触摸事件。

如果您需要阻止后代视图中的触摸事件,请考虑在父视图中覆盖onInterceptTouchEvent并在阻止触摸事件时返回true。这将导致MotionEvents被发送到拦截父节点,直到最后一个指针上升。“

答案 5 :(得分:0)

你可以这样做:

    InputMethodManager imm = 
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

请同时参考这个问题:

Close/hide the Android Soft Keyboard

答案 6 :(得分:0)

对于EditText控件,这有效...如果按下&amp;按住您已设置InputType.TYPE_NULL并调用immhideSoftInputFromWindow(...)的EditText上的菜单键,软键盘仍会弹出以及复制/粘贴菜单选项。