我有四个EditText框,它们共同组成一个值。每个方框应包含1个数字。当我在一个框中输入一个数字时,焦点应移动到下一个框。我通过在文本更改时修改焦点来“伪造”框之间的链接。以下代码有效但我想允许用户粘贴值,然后将在EditText框中拆分。因此,如果我在框[0]中粘贴“123”,则框[0]应包含“1”,框[1]应包含“2”等。我尝试将android:maxLength="1"
添加到XML但是当我尝试时要粘贴内容,maxLength验证将删除除第一个字符以外的所有字符。
在4个EditText框中拆分粘贴内容的最佳方法是什么?
EnterNumberLayout.java
public class EnterNumberLayout extends LinearLayout {
EditText[] textBoxes;
public static final int NUMBER_OF_ENTRIES = 4;
public EnterNumberLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOrientation(HORIZONTAL);
textBoxes = new EditText[NUMBER_OF_ENTRIES];
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
for (int i = 0; i < NUMBER_OF_ENTRIES; i++){
EditText et = (EditText) inflater.inflate(R.layout.number_box, null);
//et.setOnKeyListener(new BackspaceKeyListener(et));
et.addTextChangedListener(new MoveFocusWatcher(et));
et.setTag(i);
textBoxes[i] = et;
this.addView(et, i);
}
}
private class MoveFocusWatcher implements TextWatcher {
private View view;
public MoveFocusWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if ((int) this.view.getTag() < NUMBER_OF_ENTRIES - 1) {
(textBoxes[(int) this.view.getTag() + 1]).requestFocus();
}
}
public void afterTextChanged(Editable s) {}
}
}
number_box.xml
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="number|none"
android:ellipsize="start"
android:gravity="center_horizontal|center_vertical"
android:imeOptions="actionNext"/>
答案 0 :(得分:0)
可能有几种方法可以做到这一点,但我可能会删除编辑文本的文本限制1并使用文本观察器管理长度。
此处,如果将文本粘贴到第一个edit1中,则文本观察器会将值拆分为其他编辑文本字段。在afterTextChanged回调中更改文本时需要小心,因为更改将启动对该方法的另一次调用。由于edit1中的文本长度在我们处理之后只有一个,所以下一个回调什么都不做。
public ActionResult GetDistinctProperty(string propertyName)
{
var query = this.InventoryService.GetAll(Deal);
var results = Enumerable.Cast<object>(
query.SelectProperty(propertyName).Distinct()).ToList();
return Json(results, JsonRequestBehavior.AllowGet);
}