【问题标题】:Android: How to make the keypad always visible?Android:如何使键盘始终可见?
【发布时间】:2009-10-02 14:03:54
【问题描述】:

在android中,我们如何使设备键盘在应用程序中始终可见?顶部显示应用程序要呈现的内容,底部始终显示键盘。

【问题讨论】:

    标签: android keypad


    【解决方案1】:

    在 AndroidManifest.xml 文件中将 android:windowSoftInputMode="stateAlwaysVisible" 添加到您的活动中:

    <activity android:name=".MainActivity"
    android:label="@string/app_name"
    android:windowSoftInputMode="stateAlwaysVisible" />
    

    在我的测试应用程序中,这显示了应用程序启动时的键盘,虽然它没有固定在那里,但可以通过按后退按钮来关闭。

    为确保键盘始终可见,您可能必须创建自己的键盘作为应用程序 UI 的一部分。这是一个向您展示如何使用 KeyboardView 执行此操作的教程:http://www.fampennings.nl/maarten/android/09keyboard/index.htm

    【讨论】:

    • 我尝试使用 android 源代码并且可以拖动键盘,但不确定我应该修改哪个部分以禁用它隐藏。我正在看 LatinIME.java 下的类。我尝试将该谷歌代码中的 inputView 添加到 WindowManager.addView。
    • @Simon 查看我对答案的更新。您可能想使用 KeyboardView。
    【解决方案2】:

    您的布局中必须有一个EditText,并且需要扩展EditText 基类。然后重写onKeyPreIme() 方法,并返回True。现在您的键盘将始终可见,并且无法通过返回键关闭。

    警告:由于您的onKeyPreIme() 方法返回true,您无法使用返回键退出您的应用。

    例子:

    public class CustomEdit extends EditText {
    
        public CustomEdit(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
        @Override
        public boolean onKeyPreIme(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            Log.e("Log", "onKeyPreIme");
            return true;
            //return super.onKeyPreIme(keyCode, event);
        }
    }
    

    onKeyPreIme() - Android developer

    【讨论】:

      【解决方案3】:

      我找到了一种方法,可以在我的 myEditTextEditText 字段中进行编辑后保持软键盘可见。诀窍是覆盖onEditorAction 方法,使其返回true

        myEditText.setOnEditorActionListener(new OnEditorActionListener() {                     
          @Override
          public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            return true;
          }       
        });
      

      否则onEditorAction 仅在“完成”键单击 (IME_ACTION_DONE) 后返回 true,否则 false

        myEditText.setOnEditorActionListener(new OnEditorActionListener() {                     
          @Override
          public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(actionId==EditorInfo.IME_ACTION_DONE){
              Log.i(LOG_TAG, "IME_ACTION_DONE");
              return true;    
            }
            return false;
          }       
        });
      

      (另见this answer onEditorAction 方法)

      android:windowSoftInputMode="stateAlwaysVisible 添加到 Manifest 文件有助于在活动开始时显示软键盘,但它并不能阻止它在编辑后单击“完成”键时再次消失。

      【讨论】:

        猜你喜欢
        • 2017-06-04
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        • 2016-05-23
        相关资源
        最近更新 更多