Android画面キーボードの自動ポップアップ


140

私のアプリの1つに「開始画面」(基本的にはメニュー)があり、EditTextその後にいくつかButtonのが続きます。問題は、私のユーザーの何人かが、アプリを開くと、に触れなくても自動的にスクリーンキーボードをポップアップすると報告していることですEditText。私の知る限り、これらのユーザーはすべてHTC Heroを使用しています。

これは1.5のバグですか?何かできることはありますか?


1
それがバグである場合、それはおそらくスプリントヒーローにおそらくあります。Sprintの販売するヒーローにはAndroidのバグのあるバージョンがあり、バグ修正を急いで提供しているようには見えません。Sprint Herosと他のすべてのAndroidデバイスとの間には、さまざまな動作の違いがあります。私が知る限り、ヨーロッパのバージョンなど、他のバージョンのヒーローにはこれらの問題はありません。
マークB

残念ながら、ここヨーロッパのヒーローには大きな問題があります。ビルド番号によって変わりますが、3〜4個の大きなバグに遭遇しました。
Donal Rafferty 2010年

回答:


279

アクティビティのonCreateメソッドで次のコード行を使用して、ユーザーがEditTextをクリックしたときにのみキーボードがポップアップすることを確認できます。

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

これは私には機能しません(2.2 MyTouch 3G)。私のonCreate()メソッドでは、setSoftInputMode()を呼び出します。EditTextを使用しても、キーボードには:(
Nate

これでうまくいきました。私はAndroid 2.3.4を実行していて、<uses-sdk android:minSdkVersion = "3" />を使用して開発しています
Sandy

78
または、このandroid:windowSoftInputMode="stateHidden"ように使用する
Swato

だから私を混乱させているのは、私がすでにキーボードをうまく隠しているように見えるログインアクティビティがあることです。ここでも登録アクティビティを作成しましたが、デフォルトでキーボードがポップアップしています。では、ログインはこれをどのように回避していますか?ログインアクティビティでsetSoftInputModeが見つからないか、activity.xmlでwindowSoftInputMode属性が見つかりません。
チャッキー

常に機能するとは限りません。一部のデバイスでは、SOFT_INPUT_STATE_ALWAYS_HIDDENにより、アクティビティの最後にない編集テキストではソフトキーボードを表示できないというエラーが発生します。マニフェストで "android:windowSoftInputMode =" stateHidden ""を使用しても同じ効果があります。開発者のドキュメントによれば、ソフトキーボードは強制されない限り自動的に表示されませんが、それは間違いです。

85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

これはAndroid 3.0、3.1、3.2、4.0で機能します-コンパイルに使用されるエディター(Eclipse 3.7)

アプリケーションのマニフェストXMLファイルに「windowSoftInputMode = "stateHidden"」を配置して、ソフトウェアキーボードを非表示のままにしたい各アクティビティを実行します。これは、キーボードが自動的に起動せず、ユーザーがクリックする必要があることを意味します。表示するテキストフィールド。約1時間検索して、うまくいったことを共有したいと思いました。


これまでに見つけた最善の解決策。キーボードを開かずにフィールドをフォーカスします。Nexus Sと4.1.2で動作します
アレクシスモリン

1
android:windowSoftInputMode = "stateHidden | adjustNothing"は、フラグメントを使用していて、キーボードでレイアウトを変更したくない場合にも役立ちます
whyoz

6

これをAndroidManifest.xmlに追加します。

android:windowSoftInputMode="stateHidden|adjustResize"

それは完全に動作します。:)


1
答えてくれてありがとう。申し訳ありませんが、どうすればキーボードを呼び出すことができますか?を呼び出しても表示されませんrequestFocus()
徳川武司YD

6

このコードはすべてのAndroidバージョンで機能します。

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

どちらがポップアップし、どれがポップアップしないかを示すためのプラス1
デーモンアプリプログラマー

4

これをXMLの親レイアウトに追加します。

android:focusable="true" 
android:focusableInTouchMode="true"

アクティビティの開始時にフォーカスがeditTextにないことを確認します。


3

これは、アクティビティのonCreate()メソッドで使用できます。

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

または、このコードをAndroidManifest.xmlのアクティビティタグに貼り付けます

android:windowSoftInputMode="stateVisible"

2
「stateVisible」ではなく「stateHidden」を意味していると思います。
stevehs17

2

Android Mainfest.xmlのアクティビティタグの下に1行のコードを追加できます

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

これはあなたを助けるかもしれません。


1

そのバージョンのAndroidでは、ビューがインフレートされると、デフォルトでフォーカスが最初のフォーカス可能なコントロールに設定されます。物理キーボードがない場合は、スクリーンキーボードがポップアップします。

これを修正するには、フォーカスを別の場所に明示的に設定します。フォーカスがEditText以外に設定されている場合、画面キーボードは表示されません。

エミュレーターでAndroid 1.5を実行してこれをテストしてみましたか?


私はエミュレータでそれを試しました(そして、私が狂っていないことを確認するためにもう一度やりました)。「正しく」機能します(キーボードポップアップがないことを意味します)。また、私が最初にこれを書いたとき、私のG1は1.5を実行していましたが、このように動作しませんでした(キーボードが「非表示」のとき)。
ジェレミーローガン

私はまだそれが最初の焦点に関係しているに違いないと思います。多分それはHTCヒーローに固有の何かかもしれませんが、私は明示的に別のものにフォーカスを設定して、それがユーザーの問題を修正するかどうかを確認してみます。
マークB

「何も」焦点を当てる方法はありますか?
ジェレミーローガン

1
これは私には機能しません(2.2 MyTouch 3G)。私のonCreate()メソッドでは、ビューの2番目のウィジェットであるButtonでrequestFocus()を明示的に呼び出します。EditTextにより、キーボードに:(
Nate

1

あなたはプログラムでそれを行うことができます

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

またはセットandroid:windowSoftInputMode="stateHidden"<activity tag内部AndroidManifest.xml


1

インポートが上にある場所にこれを含めます。

import android.view.WindowManager;

OnCreateパーツにこのコードを追加します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

*これはAndroid.xamarinとFindFocus()用です。上記のコードの前に_enterPin.RequestFocus()があるため、現在フォーカスがあるこのビューをルートとする階層でビューを検索します。したがって、_enterPin EditTextのキーボードが表示されます*

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.