我有一个需要接受多个电子邮件地址的 EditText 输入字段。
例如在多行。
但是,通过设置android:inputType="textMultiLine|textEmailAddress"
选项textEmailAddress
可以停止输入多行。
我搜索了谷歌和 SO,所有的“解决方案”都没有解决这个问题。
什么是可行的解决方案?
5 回答
然而,通过设置 android:inputType="textMultiLine|textEmailAddress" textEmailAddress 选项停止输入多行。
textEmailAddress
并且textMultiline
是对 IME(输入法编辑器)的提示。Android 设备上提供了许多输入法编辑器,但并非所有编辑器都一定会按照您想要的方式进行处理。我对此并不感到非常惊讶,textEmailAddress
并且textMultiline
不会在某些 IME 上一起工作。
以下是一些选项:
只需使用
textMultiline
并希望用户不要用干草叉攻击你,因为你拿到@钥匙的麻烦。使用多个
EditText
小部件。例如,您可能有一个(或几个)textEmailAddress
EditText
小部件,再加上一个+
ImageButton
用于添加更多的小部件,每个EditText
.
试试这个....它对我有用
- 机器人:单行=“假”
- android:lines="10" //最大行数
- 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" />
如果您要添加多个收件人,例如 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/
希望这会帮助你。
你有没有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" -->
/>
android:inputType="textMultiLine|textEmailAddress"
将单行设为 false。这将允许您的编辑文本中有多行。