【问题标题】:Prevent user to go next line by pressing softkey enter in autocompletetextview通过在 autocompletetextview 中按软键输入防止用户进入下一行
【发布时间】:2017-01-16 06:48:13
【问题描述】:

我正在尝试禁用进入 下一行的键,以便 autocompletetextview 像搜索框一样作为单行工作,并且在选择列表中的正确文本光标将被禁用,键盘将消失

问题 1: 虽然不久前我已经使用 textview 禁用了这个光标,但也许它也可以在这里工作,但键盘仍然保留在那里,直到我在移动设备上按下返回键。

问题 2: 因为我已经尝试了 maxLines="1"、lines="1" 和其他一些东西,但它没有按应有的方式工作。

我想要什么:用户只能从列表中选择一项。

代码:

<AutoCompleteTextView
    android:id="@+id/list_names"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"         
    android:minWidth="150dp"
    android:ems="10"
 />

JAVA:

 public void getList(){

    try{
          while(scanner.hasNextLine()){
                list.add(scanner.next());
           }
    }catch (Exception e){e.printStackTrace();}
 }

 public void populate(){

    adapter = new ArrayAdapter<String>
                (this,android.R.layout.simple_list_item_1,list);
    autolist.setAdapter(adapter);
 }

我也试图阻止键盘操作中的一些键事件

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

    if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER || keyCode == 66 || event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)) {

        return false;
    }
    return false;
 }

还是不行。 按回车键之前

按回车键后

【问题讨论】:

  • 返回真;在 onKey 方法的 if 条件下
  • @UsmanRana 没有工作它作为单行,因为我把这个 lines="1" 但假设我输入 M 然后按 enter 键所以它移动到下一行但是当我看不到 M按返回删除 我看到 M 正在被删除。你懂了 ?它从未阻止输入或完成键,而是一次只能看到一行,因为我使用了 lines="1" 这就是为什么

标签: android


【解决方案1】:

android:inputType="text" 属性添加到AutoCompleteTextView 以禁用enter 按钮以转到下一行。

<AutoCompleteTextView
            android:id="@+id/list_names"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"         
            android:minWidth="150dp"
            android:ems="10"
            android:inputType="text"
            />

更新: 在键盘上按 Enter/Done 时隐藏键盘

autolist.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
                    Log.e("TAG","Done pressed");
                }
                return false;
            }
        });

选择建议时隐藏键盘

autolist.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                View view = getCurrentFocus();
                if (view != null) {
                    InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

                }
            }

        });

【讨论】:

  • 有效,但需要哪个键码,以便我放置那个键码并删除其他键码
  • 好的,所以 lines="1" 正在工作,但假设我输入了一个单词并按 Enter 键,然后列表显示空框的自动完成,例如“67 street AMI, 991-get_lop”是的,我删除了该键码事件阻止
  • 'android:inputType="text' 会将 enter 按钮更改为 next 不需要 lines=1 以防项目超过 1 行
  • 是的,sadiq,但问题是假设我输入“M”之类的内容,然后按回车键,然后出现不同的列表
  • 不应该是自动完成的效果来建议您与您正在输入的文本相关的项目吗?
【解决方案2】:

在 XML 中使用它: android:singleLine="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2010-12-29
    相关资源
    最近更新 更多