我正在一个 android 应用程序中创建一个搜索选项。
在屏幕键盘上按下“搜索”后,将触发一个事件,该事件将查询发送到服务器。我想要做的是禁用屏幕键盘上的“搜索”按钮,当没有输入相应的文本时EditText
。
我将此添加到EditText
:
android:imeOptions="actionSearch"
所以这就是为什么键盘有一个“搜索”按钮而不是默认的“输入”/“完成”。(以防万一你想知道)。
我正在一个 android 应用程序中创建一个搜索选项。
在屏幕键盘上按下“搜索”后,将触发一个事件,该事件将查询发送到服务器。我想要做的是禁用屏幕键盘上的“搜索”按钮,当没有输入相应的文本时EditText
。
我将此添加到EditText
:
android:imeOptions="actionSearch"
所以这就是为什么键盘有一个“搜索”按钮而不是默认的“输入”/“完成”。(以防万一你想知道)。
我们无法禁用 android 键盘上的操作按钮。您将不得不在编辑器操作侦听器中检查空字符串。
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();
试试这个(可能不是你想要的确切结果,但可能是你能得到的最接近的结果。
1)从 xml 中删除 android:imeOptions="actionSearch"
2)创建一个自定义 TextWatcher addTextChangedListener(TextWatcher watcher),它允许您动态更改键盘,如下所示
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){}
});
您需要在其中制作 Custom EditText 、Make Extends EditText 和 @Override 下面的方法。
这是示例代码。
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);
}
您也可以对 Search Key 执行此操作:
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;
}
});
在OnKeyListener
您的Activity
.
将此 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
这完成了,只要你是空的并且你按下搜索键,它就会显示一个 Toast 。
注意:onKey()
keyDown 调用两次,然后 KeyUp 调用一次。您必须使用 KeyEvent 实例对其进行过滤,该实例作为onKey()
方法中的参数接收。
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);
}
});
或试试这个..!对于花哨的错误日志
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"
但有人可以帮助你
当 actionId 等于IME_ACTION_DONE时,将OnEditorActionListener附加到您的文本字段并从其 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;
}
}
});