无法在 android 中使用 setKeyListener
Posted
技术标签:
【中文标题】无法在 android 中使用 setKeyListener【英文标题】:could not be able to work with setKeyListener in android 【发布时间】:2012-10-28 12:58:02 【问题描述】:我在 EditText 中放置了一个按钮,我已将按钮设置为在主 XML 的起始代码处不可见:
RelativeLayout android:layout_
android:layout_ android:layout_marginTop="10dp">
<EditText android:id="@+id/editText1" android:layout_
android:layout_ android:hint="@string/search_prompt"/>
<Button android:id="@+id/button1" android:layout_
android:layout_ android:layout_alignBottom="@+id/editText1"
android:layout_alignParentRight="true" android:layout_alignParentTop="true"
android:layout_margin="5dp" android:background="@drawable/search"
android:onClick="loadWeather" android:visibility="invisible"/>
</RelativeLayout>
现在我希望只有在 EditText 中有一些文本时按钮才可见,如果 EditText 为空,则 Button 不应该可见,并通过以下方式在 EditText 上设置了 setKeyListener 侦听器:::
final Button searchButton = (Button) findViewById(R.id.button1);
final EditText myEditText = (EditText) findViewById(R.id.editText1);
myEditText.setKeyListener(new KeyListener()
public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3)
// TODO Auto-generated method stub
if(!myEditText.getText().equals(""))
searchButton.setVisibility(View.VISIBLE);
return false;
public boolean onKeyOther(View arg0, Editable arg1, KeyEvent arg2)
// TODO Auto-generated method stub
return false;
public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3)
// TODO Auto-generated method stub
return false;
public int getInputType()
// TODO Auto-generated method stub
return 0;
public void clearMetaKeyState(View arg0, Editable arg1, int arg2)
// TODO Auto-generated method stub
);
它使 Button 在开始时不可见,但现在我无法在 EditText 中输入任何文本,EditText 无法通过键盘获得任何输入。请告诉mo如何摆脱这个错误。
【问题讨论】:
【参考方案1】:改为使用
myEditText.addTextChangedListener(new TextWatcher()
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after)
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count)
if( count == 0)
searchButton.setVisibility(View.INVISIBLE);
else
searchButton.setVisibility(View.VISIBLE);
@Override
public void afterTextChanged(Editable editable)
Log.v(TAG, "afterTextChanged");
);
【讨论】:
这段代码在添加 addTextChangedListener 的第一行给了我一个 NullPointerException。请帮忙.. 也许你忘了得到myEditText
或setContentView(R.layout.your_layout)
,在your_layout中用android:id="@+id/editText1"
声明EditText
是的,你说得对,我忘了!现在它可以工作了,但是当我单击 Backspace 时,即使 EditText 中有一些文本,按钮也会变得不可见!
好的,我已经编辑了答案并将if(count == 0)
修改为if(count == 0 && myEditText.getText().length() == 0)
,以便相应地工作。以上是关于无法在 android 中使用 setKeyListener的主要内容,如果未能解决你的问题,请参考以下文章
无法在带有 Kotlin 的 Android 中使用 Autodispose
无法使用 setsmallIcon 在 android studio 中更改图标
无法在 Android 中播放使用 AudioRecord 录制的 pcm 文件