我的应用程序中有一个EditText和一个Button.
单击该按钮时,EditText中输入的文本将添加到ListView.
如果EditText为空,我想禁用Button.如何做到这一点?
这是我点击按钮的代码
ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
imb.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
EditText et = (EditText)findViewById(R.id.EditText1);
String str = et.getText().toString();
web1.add(str);
Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
adapter1.notifyDataSetChanged();
et.setText("");
}
});
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点 ?
dru*_*abs 39
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().trim().length()==0){
button.setEnabled(false);
} else {
button.setEnabled(true);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
Run Code Online (Sandbox Code Playgroud)
在onCreate()中使用TextChangedListener并最初禁用ImageButton.
试试这个
public class MyActivity extends Activity {
ImageButton imb;
EditText et;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imb = (ImageButton) findViewById(R.id.btn_send);
et = (EditText) findViewById(R.id.EditText1);
imb.setEnabled(false); // set button disable initially
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.toString().equals("")) {
imb.setEnabled(false);
} else {
imb.setEnabled(true);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
只需将“EditText”和“Button”替换为您自己的即可。
Button.isEnabled = false
EditText.addTextChangedListener(object: TextWatcher {
override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
Button.isEnabled = s.toString().trim{ it <= ' ' }.isNotEmpty()
}
override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
after:Int) {
}
override fun afterTextChanged(s: Editable) {
}
})
Run Code Online (Sandbox Code Playgroud)
对于多个 EditTexts 去
Button.isEnabled = false
val editTexts = listOf(editText1, editText2, editText3, editText4, editText5, editText6)
for (editText in editTexts) {
editText.addTextChangedListener(object : TextWatcher {
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
var et1 = editText1.text.toString().trim()
var et2 = editText2.text.toString().trim()
var et3 = editText3.text.toString().trim()
var et4 = editText4.text.toString().trim()
var et5 = editText5.text.toString().trim()
var et6 = editText6.text.toString().trim()
computeBtn.isEnabled = et1.isNotEmpty()
&& et2.isNotEmpty()
&& et3.isNotEmpty()
&& et4.isNotEmpty()
&& et5.isNotEmpty()
&& et6.isNotEmpty()
}
override fun beforeTextChanged(
s: CharSequence, start: Int, count: Int, after: Int) {
}
override fun afterTextChanged(
s: Editable) {
}
})
}
Run Code Online (Sandbox Code Playgroud)
简单只需检查onCreate中的条件
if (et.getText().toString().trim().equals("")){
button.setEnabled(false);
}
else{
button.setEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
这在Data-Binding 中很容易实现。我希望你在这个时候意识到这一点。您可以仅通过 XML 使用 EditText 管理 Button。
android:enabled="@{etName.text.length() > 0 && etPassword.text.length() > 5}"
Run Code Online (Sandbox Code Playgroud)
这相当于
button.setEnabled(etName.getText().length() > 0 && etPassword.getText().length() > 5 );
Run Code Online (Sandbox Code Playgroud)
这&是表示 to 的HTML 实体&。可以有像 & 这样的任何运算符。
etName&etPassword是 EditTexts 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>
Run Code Online (Sandbox Code Playgroud)