输入键在EditText中开始一个新行而不是提交文本(Android)

时间:2013-12-09 15:29:53

标签: android android-edittext

我有一个简单的todolist应用程序我正在创建,通过EditText视图添加新的待办事项。因此,当我按下回车键时,我正尝试将提交新商品添加到列表中。出于某种原因,虽然它只是输入一个新行。我还注意到,当我通过eclipse使用输入键通过AVD 工作正常,但只有当我通过我的Nexus运行它时才会出现问题4。

这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.todo_main);

    //Create reference to the ListView in the main layout
    ListView myListView = (ListView)findViewById(R.id.myListView);

    //Create a reference to the EditText view in the main layout for adding new items
    final EditText editText = (EditText)findViewById(R.id.myEditText);

    //Create a an arraylist to hold all the todo items
    final ArrayList<String> todoList = new ArrayList<String>();

    //Create an ArrayAdaptor object to be able to bind ArrayLists to ListViews
    final ArrayAdapter<String> arrayAdaptor = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoList);
    myListView.setAdapter(arrayAdaptor);

    //Listens for certain keys to be pushed, particular the dpad center key or enter key
    editText.setOnKeyListener(new View.OnKeyListener() {    
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(event.getAction() == KeyEvent.ACTION_DOWN)
            {
                if((keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER))
                {
                    //add item in the EditText to the todo list 
                    todoList.add(0, editText.getText().toString());
                    //Update the view by notifying the ArrayAdapter of the data changes
                    arrayAdaptor.notifyDataSetChanged();
                    editText.setText("");
                    return true;
                }
                return false;
            }
            return false;
        }
    });
}

和XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ToDoListActivity">

<EditText
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/addItemHint"
    android:imeOptions="actionDone"
/>

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  
/>

请注意我在堆栈溢出时发现了类似的问题,但似乎没有解决我的问题。我已经尝试过了!

5 个答案:

答案 0 :(得分:14)

将EditText小部件上的singleLine属性设置为true:

<EditText
    android:singleLine="true"
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/addItemHint"
    android:imeOptions="actionDone"
/>

答案 1 :(得分:5)

android:inputType="textMultiLine"

在edittext中添加此属性将解决问题

答案 2 :(得分:1)

机器人:SINGLELINE =&#34;真&#34;被诽谤,使用

  

机器人:MAXLINES =&#34; 1&#34;

     

机器人:的inputType =&#34;文本&#34;

     

机器人:imeOptions =&#34; actionNext&#34;

答案 3 :(得分:0)

android:inputType="textImeMultiLine"

就我而言,这已经解决了问题!

答案 4 :(得分:0)

如果您要单行
简单的方法是android:inputType="text"
或者,您可以使用android:MaxLine="1"
如果要多行,请不要插入这些代码。