我在android應用程序中創建了一個搜索選項。在沒有輸入任何內容時禁用鍵盤的發送按鈕[Android]
在屏幕鍵盤上按下「搜索」後,將查詢發送到服務器的事件觸發器。 我想要做的就是禁用屏幕鍵盤上的「搜索」按鈕,但是在相應的EditText
中尚未輸入任何文本。
我已將此添加到EditText
:
android:imeOptions="actionSearch"
所以這就是爲什麼鍵盤已經在默認的代替患上了「搜索」按鈕「中輸入」 /「完成」。 (以防萬一你想知道)。
我在android應用程序中創建了一個搜索選項。在沒有輸入任何內容時禁用鍵盤的發送按鈕[Android]
在屏幕鍵盤上按下「搜索」後,將查詢發送到服務器的事件觸發器。 我想要做的就是禁用屏幕鍵盤上的「搜索」按鈕,但是在相應的EditText
中尚未輸入任何文本。
我已將此添加到EditText
:
android:imeOptions="actionSearch"
所以這就是爲什麼鍵盤已經在默認的代替患上了「搜索」按鈕「中輸入」 /「完成」。 (以防萬一你想知道)。
我們不能關閉Android鍵盤上的操作按鈕。你必須在編輯器動作監聽器中檢查空字符串。
SearchInput.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(SearchInput.getText().toString().length() == 0)
{
Search.setClickable(false);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
Search.setClickable(false);
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
Search.setClickable(true);
}
});
或試試這個..!花式錯誤dilog
Search.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(searchinput.getText().toString().length() == 0)
{
searchinput.setError("Enter something Blah Blah..!");
}
else
{
// Original Functions Goes Here
}
使用下面的代碼在編輯文字,
android:imeOptions="flagNoEnterAction"
我不能設置flagNoEnterAction = "false"
但有人可以幫你
這隻適用於如果搜索按鈕是我自己在應用程序中的按鈕。但是我正在討論禁用Android鍵盤上的輸入/搜索鍵。 – Pieter888
我不會upvote這個答案,因爲它不是我的問題的有效答案。我想禁用android的屏幕鍵盤的搜索按鈕。不是我的應用程序中的按鈕。 – Pieter888
回答編輯,添加第3個代碼,可能會幫助您或其他人至少 – VenomVendor
試試這個(可能並不是你想要的確切結果,但可能是最接近的。
1)拆下機器人:從XML
2)創建自定義TextWatcher addTextChangedListener(TextWatcher守望者),允許您更改鍵盤動態像這樣
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
if(firstTime){//a boolean you init to true
firstTime = false;
textMessage.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
我嘗試過,但在創建視圖後無法更改按鈕的ImeOptions。但無論如何,它並不覺得正確的解決方案,因爲我希望輸入/搜索按鈕被禁用,直到輸入內容。如果這個答案有效,它會在輸入按鈕上顯示文字「完成」而不是「搜索」。我只想讓按鈕變灰或顯示用戶他/她無法搜索空字符串。 – Pieter888
imeOptions = 「actionSearch」 你需要製作自定義EditText,在其中擴展EditText和@Override Below方法。
以下是示例代碼。
private ArrayList<Integer> keysToIgnore = new ArrayList<Integer>();
public EditTextCus(Context context) {
super(context);
}
public EditTextCus(Context context, AttributeSet attrs){
super(context, attrs);
}
public EditTextCus(Context context, AttributeSet attrs, int defStyle){
super (context, attrs, defStyle);
}
private Boolean keyInIgnoreList(int keyCode) {
for (Integer i:keysToIgnore){
int key = i.intValue();
if (key == keyCode)
return true;
}
return false;
}
public void addKeyToIgnoreList(int keyCode) {
if (!keyInIgnoreList(keyCode)){
keysToIgnore.add(keyCode);
}
}
public void removeKeyFromIgnoreList(int keyCode) {
if (keyInIgnoreList(keyCode)){
Integer key=new Integer(keyCode);
keysToIgnore.remove(key);
}
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
//Log.d("ws", "dispatchKeyEventPreIme(" + event + ")");
// swallow the any key in the ignore list
if (keyInIgnoreList(event.getKeyCode())) {
KeyEvent.DispatcherState state = getKeyDispatcherState();
if (state != null) {
if (event.getAction() == KeyEvent.ACTION_DOWN
/*&& event.getRepeatCount() == 0*/) {
state.startTracking(event, this);
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP
&& !event.isCanceled() && state.isTracking(event)) {
return true;
}
}
}
}
return super.dispatchKeyEventPreIme(event);
}
你也可以這樣做搜索關鍵字:
mCustomEditText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_SEARCH && event.getAction()==KeyEvent.KEYCODE_SEARCH){
System.out.println("Search pressed.........");
}
return false;
}
});
在Activity
實現OnKeyListener
。
將此keyListener添加到您的EditText
。
myEditText.setOnKeyListener(this);
覆蓋onKey()
在您的Activity
。
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(v.getId() == R.id.myEditText)
{
if(KeyEvent.KEYCODE_ENTER == keyCode)
{
if(myEditText.getText().toString().equals("") || myEditText.getText().toString().equals(null))
{
Toast.makeText(KeyboardTestActivity.this, "Event Eaten", Toast.LENGTH_SHORT).show();
Log.e("onKey", "Event Eaten");
return true;
}
}
}
return false;
}
和這樣做將顯示一條吐司,只要您EditText
是空的,你按下搜索鍵。
注意:onKey()
爲keyDown調用兩次,然後調用KeyUp。您將不得不使用KeyEvent實例對其進行過濾,該實例在onKey()
方法中作爲參數接收。
我測試了這種方法。它的工作正常..... –
將OnEditorActionListener附加到您的文本字段,並在actionId等於IME_ACTION_DONE時從其onEditorAction方法返回true。這將防止軟鍵盤從藏身:
EditText txtEdit = (EditText) findViewById(R.id.txtEdit);
txtEdit.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// your additional processing...
return true;
} else {
return false;
}
}
});
他想禁用操作按鈕,不會阻止鍵盤隱藏。 – Ronnie
setOnEditorActionListener(new TextView.OnEditorActionListener() {
if (txtView.getText().toString().trim().length() == 0) {
Toast.makeText(getApplicationContext(), "Please Enter some text to search",
Toast.Short).show();
return true; // returning true will keep the keyboard on
}
else search();
這很糟糕。我想檢查一個空字符串將不得不做。我會選擇這個答案,因爲它是我的問題的真正答案,而不僅僅是替代方案。 – Pieter888