1

我有一个需要接受多个电子邮件地址的 EditText 输入字段。
例如在多行。
但是,通过设置android:inputType="textMultiLine|textEmailAddress"
选项textEmailAddress可以停止输入多行。
我搜索了谷歌和 SO,所有的“解决方案”都没有解决这个问题。
什么是可行的解决方案?

4

5 回答 5

1

然而,通过设置 android:inputType="textMultiLine|textEmailAddress" textEmailAddress 选项停止输入多行。

textEmailAddress并且textMultiline是对 IME(输入法编辑器)的提示。Android 设备上提供了许多输入法编辑器,但并非所有编辑器都一定会按照您想要的方式进行处理。我对此并不感到非常惊讶,textEmailAddress并且textMultiline不会在某些 IME 上一起工作。

以下是一些选项:

  1. 只需使用textMultiline并希望用户不要用干草叉攻击你,因为你拿到@钥匙的麻烦。

  2. 使用多个EditText小部件。例如,您可能有一个(或几个)textEmailAddress EditText小部件,再加上一个+ ImageButton用于添加更多的小部件,每个EditText.

于 2013-09-21T16:03:58.577 回答
1

试试这个....它对我有用

  1. 机器人:单行=“假”
  2. android:lines="10" //最大行数
  3. android:minLines = "3" // 这将是高度

看看这个 EditText

  <EditText
    android:id="@+id/addr_edittext"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    android:gravity="top|left"
    android:inputType="textEmailAddress|textMultiLine"
    android:lines="20"
    android:minLines="5"
    android:scrollHorizontally="false"
    android:scrollbars="vertical"
    android:singleLine="false" />
于 2013-09-21T15:49:53.620 回答
0

如果您要添加多个收件人,例如 gmail 或任何电子邮件...

请通过类似的帖子

Android EditText Gmail 喜欢字段

或者您可以制作多个电子邮件自动完成 TextView。

public class ContactsAutoComplete extends AutoCompleteTextView {

    public ContactsAutoComplete(final Context context, final AttributeSet attrs,
            final int defStyle) {
        super(context, attrs, defStyle);
        this.setThreshold(0);
        this.setUpContacts();
    }

    public ContactsAutoComplete(final Context context, final AttributeSet attrs) {
        super(context, attrs);
        this.setThreshold(0);
        this.setUpContacts();
    }

    public ContactsAutoComplete(final Context context) {
        super(context);
        this.setThreshold(0);
        this.setUpContacts();
    }

    // --- comma separating stuff

    private String previous = ""; //$NON-NLS-1$
    private String seperator = ", "; //$NON-NLS-1$

    /**
     * This method filters out the existing text till the separator and launched
     * the filtering process again
     */
    @Override
    protected void performFiltering(final CharSequence text, final int keyCode) {
        String filterText = text.toString().trim();
        previous = filterText.substring(0,
                filterText.lastIndexOf(getSeperator()) + 1);
        filterText = filterText.substring(filterText.lastIndexOf(getSeperator()) + 1);
        if (!TextUtils.isEmpty(filterText)) {
            super.performFiltering(filterText, keyCode);
        }
    }

    /**
     * After a selection, capture the new value and append to the existing text
     */
    @Override
    protected void replaceText(final CharSequence text) {
        super.replaceText(previous + text + getSeperator());
    }

    public String getSeperator() {
        return seperator;
    }

    public void setSeperator(final String seperator) {
        this.seperator = seperator;
    }

    // --- contacts stuff

    private void setUpContacts() {
        ContactListAdapter adapter = new ContactListAdapter(getContext(), null);
        setAdapter(adapter);
    }

    @SuppressWarnings("nls")
    public static class ContactListAdapter extends CursorAdapter implements Filterable {
        public ContactListAdapter(Context context, Cursor c) {
            super(context, c);
            mContent = context.getContentResolver();
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            final LayoutInflater inflater = LayoutInflater.from(context);
            final TextView view = (TextView) inflater.inflate(
                    android.R.layout.simple_dropdown_item_1line, parent, false);
            view.setText(convertToString(getCursor()));
            return view;
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            ((TextView) view).setText(convertToString(cursor));
        }

        @Override
        public String convertToString(Cursor cursor) {
            return cursor.getString(1) + " <" + cursor.getString(2) +">";
        }

        @Override
        public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
            if (getFilterQueryProvider() != null) {
                return getFilterQueryProvider().runQuery(constraint);
            }

            StringBuilder buffer = null;
            String[] args = null;
            if (constraint != null) {
                constraint = constraint.toString().trim();
                buffer = new StringBuilder();
                buffer.append("UPPER(").append(People.NAME).append(") GLOB ?");
                buffer.append(" OR ");
                buffer.append("UPPER(").append(ContactMethods.DATA).append(") GLOB ?");
                args = new String[] { constraint.toString().toUpperCase() + "*",
                        constraint.toString().toUpperCase() + "*" };
            }

            return mContent.query(Contacts.ContactMethods.CONTENT_EMAIL_URI,
                    PEOPLE_PROJECTION, buffer == null ? null : buffer.toString(), args,
                    Contacts.People.DEFAULT_SORT_ORDER);
        }

        private final ContentResolver mContent;
    }

    private static final String[] PEOPLE_PROJECTION = new String[] {
        People._ID,
        People.NAME,
        ContactMethods.DATA
    };
}

使用这个自定义 AutoCompleteTextView,如下所示

<YOUR_PACKAGE.ContactsAutoComplete
        android:id="@+id/emails"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Send To"
        android:scrollbars="vertical"
        android:singleLine="false" />

添加此权限

<uses-permission android:name="android.permission.READ_CONTACTS" />

请参考以下博客。

http://www.betaful.com/2011/02/multiple-e-mail-autocomplete-in-android/

希望这会帮助你。

于 2013-09-21T17:08:02.147 回答
0

你有没有MaxLine attribute为 EditText设置

试试这个代码:

  <EditText
    android:inputType="textMultiLine" <!-- Multiline input -->
    android:lines="8" <!-- Total Lines prior display -->
    android:minLines="6" <!-- Minimum lines -->
    android:gravity="top|left" <!-- Cursor Position -->
    android:maxLines="10" <!-- Maximum Lines -->
    android:layout_height="wrap_content" <!-- Height determined by content -->
    android:layout_width="fill_parent" <!-- Fill entire width -->
    android:scrollbars="vertical" <!-- Vertical Scroll Bar -->
    android:singleLine="false" <!--Enables insertion of new line with "enter" -->
  />
于 2013-09-21T15:47:28.480 回答
-1
android:inputType="textMultiLine|textEmailAddress"

将单行设为 false。这将允许您的编辑文本中有多行。

于 2013-09-21T15:52:18.793 回答