我有3个< code > edittext(et1,et2,et3),彼此相邻排列,其中< code>maxLength为“1”。
我的要求是:
> < li>
当在编辑文本中键入字母时(只能包含1个字符,因为最大长度为1),光标会自动转到下一个编辑文本。
类似地,当用户单击et2上的back时,光标应该转到et1。
编辑文本将按顺序填写。首先是第一个,然后是第二个,最后是第三个。因此,即使用户单击第三个编辑文本框
如何以编程方式实现这一点。
谢谢
以下是您的问题答案:
//findViewById and bla bla bla...
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText1.setSelection(count); //set the cursor after the last character
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(editText1.length() == 1){ //check for number of characters
editText1.clearFocus();
editText2.requestFocus();
}
}
});
editText2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText2.setSelection(count);
if(editText1.length() != 1){ //check if previous editText is empty
editText2.clearFocus();
editText1.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(editText2.length() == 1){
editText2.clearFocus();
editText3.requestFocus();
}
}
});
editText3.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText3.setSelection(count);
if(editText1.length() != 1){ //check if first editText is empty
editText3.clearFocus();
editText1.requestFocus();
}
else if(editText2.length() != 1){ //check if second editText is empty
editText3.clearFocus();
editText2.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(editText3.length() == 1){
//Do something after the last editText was typed
}
}
});
//user pressed the back button
@Override
public void onBackPressed(){
if(editText2.isFocused()){
editText2.clearFocus();
editText1.requestFocus();
}
else if(editText3.isFocused(){
editText3.clearFocus();
editText2.requestFocus();
}
else super.onBackPressed();
}
主要思想是使用TextWatcher。
您可以使用类似如下的内容:
et1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
et2.requestFocus;
et1.setEnabled(false);
}
@Override
public void afterTextChanged(Editable s) {
}
});
et2.addTextChangedListener(new TextWatcher() {
String textBeforeChange;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
textBeforeChange = s.subSequence(start, start + count).toString();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.subSequence(start, start + count).length == 0
&& textBeforeChange .length >= 1)
et1.requestFocus();
}
@Override
public void afterTextChanged(Editable s) {
}
});
本文向大家介绍连续和非连续内存分配之间的区别,包括了连续和非连续内存分配之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解连续和非连续内存分配之间的区别- 连续内存分配 在这种分配类型中,连续的内存块被分配给一个文件/进程。 与不连续的内存相比,它执行得更快。 易于通过操作系统进行控制。 开销最小,因为在执行进程时地址转换不多。 连续内存分配中存在内部碎片。 有不同类型的
问题内容: 我有一个熊猫数据框如下 上面的数据帧有83000行。我想获取两个连续行之间的时间差,并将其保存在单独的列中。理想的结果是 我已经尝试过但出现错误,如下所示 如何解决这个问题 问题答案: 问题是功能需要s或s ,因此首先要转换为,然后得到并除以: 如果需要或每分钟:
问题内容: 我有一个列表,我想找到连续元素之间的区别: 您将如何编码find_diff()函数?我可以使用“ for”迭代器对此进行编码,但是我敢肯定,有一种非常简单的方法可以使用一个简单的内衬进行编码。 问题答案: 您可以利用,并列出理解: 在性能方面,似乎并没有太大的差异:
问题内容: 我试图用Java编写一个程序,该程序涉及使对象 从一次按键操作中不断移动。想一想吃豆子,在其中按下一次, 吃豆子继续上升直到您按下另一个键。 如果可能的话,我想保持代码简单。我的原始动作(一键按下=一动作)是这样的 : 值中的x和y是椭圆的位置。这完美地工作了,但是我 希望它只按一次 就可以继续运动,而不必按住它来保持运动。我尝试了一个带有布尔 参数的while循环,该布尔参数在tru
我们正在构建一个应用程序来从传感器获取数据。数据流传输到Kafka,消费者将从Kafka发布到不同的数据商店。每个数据点都有多个表示传感器状态的属性。 在其中一个消费者中,我们希望仅当值发生更改时才将数据发布到数据存储。例如,如果有温度传感器,每10秒轮询一次数据,我们希望收到如下数据: 在上述情况下,只应发布第一条记录和第三条记录。 为此,我们需要某种方法来比较键的当前值与具有相同键的先前值。我
我需要实施一个连续的任务时间表, 我通过Quartz通过,接下来的三次执行 但我希望02:45:00之后的下一次行刑是在03:30:00而不是03:00:00 有什么办法能做到吗