【问题标题】:Soft keyboard ... not related to EditText?软键盘...与 EditText 无关?
【发布时间】:2014-10-19 09:01:53
【问题描述】:

如果硬键盘可用,则生成onKey onKeyDown、onKeyUp等处理的按键事件。

如果硬键盘不可用,则显示软键盘似乎很自然,期望它会产生相同的按键事件。

是否可以通过 EditText 以外的方式显示键盘?

我能想到的唯一想法是参考 EditText 代码 :) 可能已经有人这样做了。

一个建议,Android Terminal Emulator 正是这样做的:它允许在不使用 EditText 的情况下从软键盘输入键,因此这个想法并非毫无意义。

【问题讨论】:

  • 在清单文件的根活动中尝试 android:windowSoftInputMode="stateVisible"。
  • 谢谢你,安德鲁。它使软键盘在活动开始时可见。但我想在活动中隐藏和显示键盘。
  • 所以说 onClick 吧?

标签: android keyboard


【解决方案1】:

根据我的研究和this 文章,您似乎可以轻松地显示/隐藏软键盘,但不建议这样做。

从那个网站,代码如下。

显示键盘...可能是 onClick 或 onOptionsItemSelected:

EditText txtName = (EditText) findViewById(R.id.txtName);
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
inputMethodManager.showSoftInput(txtName, InputMethodManager.SHOW_IMPLICIT);

隐藏键盘:

InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

再说一次,指南中不推荐这种方法,但如果您想尝试,这将是可行的方法。

祝你好运!

【讨论】:

    【解决方案2】:

    谢谢你,安德鲁。只是我想扩展文章,你参考一下。

    你可能注意到了,这篇文章(和上面的代码)使用了 EditText,这不是我想要的。幸运的是,正如我所发现的,这适用于任何 TextView,只要它是focused

    如何在没有硬键盘的情况下使视图聚焦?使其成为 focusableInTouchMode 和 requestFocus。

    这是我的布局:

    <?xml version="1.0" encoding="us-ascii"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"   >
    
        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:imeOptions="actionGo"
            android:inputType="numberDecimal"
            android:text="==== Just to make it visible ======"
            android:focusableInTouchMode="true">
            <requestFocus/>
        </TextView>
    
    
    </FrameLayout>
    

    注意,您可以使用 android:imeOptions 和 android:inputType 来设置软键盘的类型和外观。

    而且代码看起来很简单。您在单击时调出键盘并在按下操作键(代码 KeyEvent.KEYCODE_ENTER)时将其关闭。 BACK按钮也必须由系统处理,否则 我们将永远陷入困境:)

    以下代码假定 API 3+。

    @TargetApi(Build.VERSION_CODES.CUPCAKE)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.startup);
    
        TextView tv = (TextView)findViewById(R.id.text); 
    
        final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
            `}
        });
    
        tv.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                int action = event.getAction();
                switch (action) {
                    case KeyEvent.ACTION_DOWN:
                        Log.d("KbdTest", "Action Down. Key Code: " + keyCode);
                        if (keyCode == KeyEvent.KEYCODE_ENTER)
                                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                        return (keyCode != KeyEvent.KEYCODE_BACK);
    
                    case KeyEvent.ACTION_UP:
                        Log.d("KbdTest", "Action Up. Key Code: " + keyCode);
                        return (keyCode != KeyEvent.KEYCODE_BACK);
    
                    default:
                        Log.d("KbdTest", "Unknown action (" + action + "). Key Code: " + keyCode);
                        return false;
                }
    
            }
        }); 
     }
    

    老实说,我并没有印象深刻。首先它显示光标,而我不想看到它。其次,它有时会设法编辑文本 (!),即使 onKey 中的 return true 预计会抑制任何干扰。

    无论如何,这是一个很好的起点! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      相关资源
      最近更新 更多