2010-03-06 148 views
23

我正在開發和使用1.6 SDK的Android應用程序。我正在使用TimePicker,並且我不希望軟鍵盤在您點擊TimePicker中的數字時出現。我只想要使用加號和減號按鈕更改TimePicker。我已經嘗試過使用android:focusable="false"android:focusableInTouchMode="false",希望這樣做,但他們似乎沒有做任何事情。有沒有辦法做到這一點?在Android TimePicker上禁用鍵盤輸入

回答

49

嘗試使用:

myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); 

對文本禁用焦點內部號碼查看器

+4

這也適用於DatePicker,只是使用DatePicker.FOCUS_BLOCK_DESCENDANTS來代替。 – swanson 2012-02-20 17:31:09

+3

只需使用ViewGroup.FOCUS_BLOCK_DESCENDANTS ..它們都具有相同的值 - __ - ' – Tobrun 2014-08-06 11:00:17

+2

您還可以在xml中使用android:descendantFocusability =「blocksDescendants」 。 – Borzh 2015-04-06 18:12:15

0

你可以這樣做:

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

請參考這個問題還有:

Close/hide the Android Soft Keyboard

+0

這對TimePicker不起作用,我之前用EditText做過,另外,我不只是想隱藏軟鍵盤,而是基本上讓TimePicker內的EditTexts永遠不會有焦點我只有wa nt使用加號和減號按鈕更改值,並且我不希望用戶能夠點擊數字所在的區域並且光標出現。我一直在試圖弄清楚如何獲得對TimePicker內部的這些孩子的引用來做到這一點...但我無法弄清楚如何。 – ashughes 2010-03-07 21:05:04

0

這確實無論是EditText上沒有工作控制......如果按&保持在其上已設置InputType.TYPE_NULL,並呼籲immhideSoftInputFromWindow(...)一個EditText,菜單鍵軟鍵盤仍然與複製/粘貼沿彈出菜單選項。

+1

PS:這是指使用InputtMethodManager的上一篇文章,對不起,我的意思是使用「反饋」按鈕! – Laurent 2012-01-08 14:18:28

2

不知道這個工程的TimePicker,但我找到了正確的參數設置爲使用,以防止鍵盤使用其內容的複製和粘貼菜單聚焦編輯文字時顯示或:

首先,您應該致電撥打setInputType(InputType.TYPE_NULL)

接着實例化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的內容。

2

我只是試圖(目標4.0.3)

myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); 

沒有成功。對於「機器人TimePicker BLOCK_DESCENDANTS不工作」谷歌搜索後,我跟着命中

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

在最後發表的文章,這是一個「項目成員」,規定:

「後代的可聚焦性是指一個視圖的能力使用鍵盤,軌跡球或d-pad進行焦點遍歷,不會受設計影響觸摸事件。

如果您需要阻止來自後代視圖的觸摸事件,請考慮在父視圖中重寫onInterceptTouchEvent,並在需要阻止觸摸事件時返回true。這將導致MotionEvents發送到攔截父,直到最後一個指針上升「

6

另一種方式您的XML補充一點:。

android:descendantFocusability="blocksDescendants"

3

XML:

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