如果EditText中的单词少于3个单词,我想按Button禁用,如果EditText中的单词超过3个单词,那么我想启用它以便它可以被点击。
有人可以帮我吗?
答案 0 :(得分:33)
您必须addTextChangedListener
到EditText
像这样:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
enableSubmitIfReady();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
在那种方法中,你应该这样做:
public void enableSubmitIfReady() {
boolean isReady = yourEditText.getText().toString().length() > 3;
yourbutton.setEnabled(isReady);
}
希望它有所帮助。
答案 1 :(得分:1)
单独使用afterTextChanged的问题是在应用程序启动时,在您开始键入EditText之前,它无法最初禁用该按钮。
这就是我实施我的方式而且效果很好。在Activity的onCreate方法
中调用此方法void watcher(final EditText message_body,final Button Send)
{
final TextView txt = (TextView) findViewById(R.id.txtCounter);
message_body.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged(Editable s)
{
txt.setText(message_body.length() + " / 160"); //This is my textwatcher to update character left in my EditText
if(message_body.length() == 0)
Send.setEnabled(false); //disable send button if no text entered
else
Send.setEnabled(true); //otherwise enable
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){
}
public void onTextChanged(CharSequence s, int start, int before, int count){
}
});
if(message_body.length() == 0) Send.setEnabled(false);//disable at app start
}
答案 2 :(得分:1)
您可以执行@Udaykiran所说的内容,但请改用arg0.length()
。
Editable
还包含已更改的TextEditor
内容的长度
答案 3 :(得分:0)
这在Data-Binding中非常容易。您可以根据EditText直接处理XML中的按钮状态。
android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
&
是HTML entity,表示 &
。
etName
和etPassword
是名称和密码EditText的对应ID。
示例XML-
<LinearLayout
>
<EditText
android:id="@+id/etName"
/>
<EditText
android:id="@+id/etPassword"
/>
<Button
android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
/>
</LinearLayout>