38

次の機能をテストするための簡単なアプリケーションを作成しました。アクティビティを起動するとき、ソフトキーボードを開いた状態で起動する必要があります。

コードが機能しない?!

マニフェストでさまざまな「状態」設定を試し、コードで InputMethodManager (imm) へのさまざまなフラグを試しました。

AndroidManifest.xml に設定を含め、唯一のアクティビティの onCreate で明示的に呼び出しました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mycompany.android.studyIme"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".StudyImeActivity"
                  android:label="@string/app_name" 
                  android:windowSoftInputMode="stateAlwaysVisible">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

... メイン レイアウト (main.xml) ...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    <EditText
        android:id="@+id/edit_sample_text"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:hint="@string/hello"
        android:inputType="textShortMessage"
    />
</LinearLayout>

...そしてコード...

public class StudyImeActivity extends Activity {
    private EditText mEditTextStudy;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mEditTextStudy = (EditText) findViewById(R.id.edit_study);
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(mEditTextStudy, InputMethodManager.SHOW_FORCED);
    }
}
4

14 に答える 14

52

アクティビティが起動すると、キーボードは最初は表示されているようですが、次のように機能するため、別の何かによって隠されているようです (ただし、実際には汚い回避策です)。

最初の方法

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
editText.postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        editText.requestFocus();
        imm.showSoftInput(editText, 0);
    }
}, 100);

2番目の方法

onCreate でアクティビティの作成時に起動する

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() 
    {
    //  InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    //    inputMethodManager.toggleSoftInputFromWindow(EnterYourViewHere.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);

        if (inputMethodManager != null)
        {
            inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
        } 
    }
}, 200);

3 番目の方法 マニフェストのアクティビティ タグに与えられたコードを追加します。起動時にキーボードが表示され、最初のフォーカスが目的のビューに設定されます。

android:windowSoftInputMode="stateVisible"
于 2014-12-18T07:04:28.913 に答える
23

私のコードをテストしたときに見つけたので、あなたがまだ答えを探していることを願っています。コードは次のとおりです。

InputMethodManager imm = (InputMethodManager)_context.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.toggleSoftInput(0, 0);

答えられた私の質問は次のとおりです: android - オンデマンドでソフトキーボードを表示する

于 2011-06-29T00:58:40.867 に答える
21

これは、ハードキーボードを備えた電話で私と一緒に機能しました:

editText1.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
          imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
于 2013-02-22T01:55:31.947 に答える
18

これは非常に微妙なので、犯罪です。これは、ハードなスライドアウト キーボードを備えていない電話機で機能します。ハード キーボードを備えた電話は、この呼び出しで自動的に開きません。私の LG と古い Nexus One にはキーボードがありません。したがって、アクティビティの起動時にソフト キーボードが開きます (これが私の望みです)。ハードキーボードを閉じた状態で編集フィールドに触れるまで、キーボードを押し続けます。

于 2011-04-02T22:41:57.030 に答える
12

この答えは遅いかもしれませんが、私にとっては完璧に機能します。多分それは誰かを助ける:)

public void showSoftKeyboard(View view) {
    if (view.requestFocus()) {
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        boolean isShowing = imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
        if (!isShowing)
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    }
}

必要に応じて、他のフラグを使用できます

InputMethodManager.SHOW_FORCED
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
于 2016-06-22T12:20:39.343 に答える