Android Studio - 始终显示键盘?

时间:2015-12-18 00:25:37

标签: android

我试图创建一个简单的文本冒险类型游戏作为项目来帮助我学习东西。为此,我需要键盘始终可见并专注于屏幕上唯一的编辑文本(userinputEditText)。

用户键入内容,按Enter键,文本将以字符串形式捕获,然后显示在文本视图(mainTextView)中,该文本视图位于ScrollView内,以便文本始终显示最新条目。键侦听器用于检测何时按下回车键以避免仅向编辑文本添加新行。

当您按键时,虽然键盘关闭但您必须再次按“编辑文本”才能键入。我知道这是一个简单的解决方案,可以让键盘永久打开,但我无法获得任何我尝试过的东西。

    final EditText userinputEditText = (EditText) findViewById(R.id.user_input_edittext);
    final TextView mainTextView = (TextView) findViewById(R.id.mainTextView);
    final ScrollView scrollview = (ScrollView) findViewById(R.id.scrollView);
    scrollview.fullScroll(ScrollView.FOCUS_DOWN);

    /// Update MainText window when Enter is pressed
    userinputEditText.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER:
                        String userInputString = userinputEditText.getText().toString();
                        mainTextView.append(userInputString + "\n");
                        userinputEditText.setText("");
                        scrollview.fullScroll(ScrollView.FOCUS_DOWN);
                        return true;
                    default:
                        break;
                }
            }
            return false;
        }
    });

}

1 个答案:

答案 0 :(得分:1)

以下是您可以重复使用的示例代码,

在AndroidManifest.xml中使用此..

  

机器人:windowSoftInputMode = “stateAlwaysVisible”

如下所示

<activity android:name=".MainActivity"
          android:windowSoftInputMode="stateAlwaysVisible">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

在您的布局中,您可以使用

    <EditText
        android:id="@+id/editText"
        android:singleLine="true"
        android:imeOptions="actionDone"
        ... 
     />

在您的活动的 OnCreate()方法中,您可以实现类似的内容......

final EditText editText = ((EditText) findViewById(R.id.editText));
        editText.setOnEditorActionListener(new EditText.OnEditorActionListener(){
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    String value = editText.getText().toString();
                    //TODO .. write your respective logic to add data to your textView

                    editText.setText(""); // clear the text in your editText
                    return true;

            }
        });