用于粘贴的链接EditText框

时间:2016-09-06 16:25:49

标签: android android-edittext

我有四个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"/>

1 个答案:

答案 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);
}